zoukankan      html  css  js  c++  java
  • 小偷公司(文三西路口红灯偷盗)—工厂模式 包括(简单工厂,工厂方法,抽象工厂)(一)

        一日下班,千里迢迢赶着去吃麦当劳,谁叫城西没有麦当劳,而且这麦当劳也真是,在杭州的点还真是少。吃完回来,骑着公交自行车,来到了文三西路口。

    这一路绿灯的就到这里被红灯卡住。忽然间看到一帅哥骑着电瓶车也被红灯卡住,谁知在他的口袋旁边怎么有那么多手啊。果然一群小偷,那帅哥还反应真灵敏,

    一回头一扣手,还一口痰吐给那小偷,小偷觉得委屈,想冲上去,但被同伴拉住。唉,可恶的小偷。还一群一群的出洞,果然训练有素啊。

        回到家,看了好几年前的牛群和冯巩演“小偷公司”相声,然后想起了之前学过的设计模式,觉得这小偷啊很符合设计模式中的工厂模式。

        这一群一群的小偷啊,是有组织有纪律的。这是一个团体,专门负责偷东西的。也就是偷的操作。那一个小偷的群体就是小偷公司,专门训练小偷的,让他们去偷东西,

    那就是“小偷公司”。

        小偷公司出来的小偷分工明确,让具体的小偷执行不同的偷盗行为,比如,这群人是偷手机的,这群人是偷相机的,这群人是偷钱包的,但是都是继承了偷盗操作的这个类。

    而小偷公司只负责产生偷盗这个对象,具体偷什么,是由当天的偷盗总管(客户端)决定,当天吩咐,你你你去偷抢包,你你你去偷手机。这也就是简单工厂的模式了。简单工厂(小偷公司)这个工厂包含了偷盗的所有逻辑,然后根据客户端(当天的偷盗总管)指示,你去偷手机,接下里小偷公司就产生一个偷手机的小偷对象,执行去偷手机了。直接看类图比较清晰:

    StealCompany

    类图没啥好解释的。一看就明白了。那就直接上代码了,先上JAVA代码,C#的代码放在附件里面直接下载吧。C#的用SharpDevelop 3.0写的。

    StealOperation类:

    package DesignPattern.SimpleFactory.StealCompany;
    
    //import java.io.Console;
    
    public abstract class StealOperation {
        public void Steal() {
        System.out.println("不知道偷什么!");
        }
    }
    stealOperation类是一个抽象类,用来定义抽象的偷的行为

    StealCellPhone类:

    package DesignPattern.SimpleFactory.StealCompany;
    
    public class StealCellPhone extends StealOperation {
        @Override
        public void Steal() {
        // TODO Auto-generated method stub
        System.out.println("我是偷手机的!OH,YEE!");
        }
    }
    继承抽象的偷的类,然后来重写Steal方法。
     

    StealWallet类:

    package DesignPattern.SimpleFactory.StealCompany;
    
    public class StealWallet extends StealOperation {
        @Override
        public void Steal() {
        // TODO Auto-generated method stub
        System.out.println("我是偷钱包的!OH,BABY!");
        }
    }
     

    StealCamera类:

    package DesignPattern.SimpleFactory.StealCompany;
    
    public class StealCamera extends StealOperation {
        @Override
        public void Steal() {
        // TODO Auto-generated method stub
        System.out.println("我是偷照相机的!OH,YEE!");
        }
    }
     

    简单工厂类StealCompanyFactory:

    package DesignPattern.SimpleFactory.StealCompany;
    
    public class StealCompanyFactory {
        /**
         * 小偷公司通信规约: 偷钱包 :1 偷相机:2 偷手机:3
         * 
         * @return
         */
        public static StealOperation CreateStealOperation(int stealInfo) {
        StealOperation steal = null;
        switch (stealInfo) {
        case 1:
            steal = new StealWallet();
            break;
        case 2:
            steal = new StealCamera();
            break;
        case 3:
            steal = new StealCellPhone();
            break;
        default:
            break;
        }
        return steal;
        }
    }
    简单工厂类中包含了偷的一些逻辑。

    测试类:

    package DesignPattern.SimpleFactory.StealCompany;
    
    public class StealCompanyTest {
    
        /**
         * 
         * 小偷公司通信规约: 偷钱包 :1 偷相机:2 偷手机:3
         * 
         * 
         * @param args
         */
        public static void main(String[] args) {
        // TODO Auto-generated method stub
        StealOperation operation = StealCompanyFactory.CreateStealOperation(1);
        operation.Steal();
    
        StealOperation operation2 = StealCompanyFactory.CreateStealOperation(2);
        operation2.Steal();
    
        StealOperation operation3 = StealCompanyFactory.CreateStealOperation(3);
        operation3.Steal();
        }
    
    }
    测试类(客户端)去除了对具体偷的方法的依赖。

    总结:

      经过分析上面的代码也得出了简单工厂的优点就是,在工厂类中包含类中包含了必要的逻辑判断,然后客户端(测试类)中可以
    去除对具体产品的依赖。
    下面给出经典的简单工厂的类图:
    SimpleFactory 

    运行的结果:

    我是偷钱包的!OH,BABY!
    我是偷照相机!OH,YEE!
    我是偷手机的!OH,YEE!

    附件:C#版本的简单工厂

  • 相关阅读:
    为什么叫"鲁棒"图
    Linux系统信息查看命令......
    網頁配色工具
    java基础方面知识点
    網頁設計收藏站70個
    bj_linux...
    工具
    软件工程阅读(中英文对照)之软件维护
    软件工程新方法和技术简介(英文)
    软件工程阅读(中英文对照)之文档技术
  • 原文地址:https://www.cnblogs.com/UpThinking/p/1713997.html
Copyright © 2011-2022 走看看