zoukankan      html  css  js  c++  java
  • 设计模式Day01

    一、工厂模式
    1、工厂模式的关键点就是如何描述好这两个角色之间的关系,分为四种情况:
    (1)单一产品系,工厂生产一种类型的产品;
    (2)多产品系,特征相同。工厂生产多种类型的产品;
    (3)多产品系,部分特征相同;
    (4)多产品系,无特征相同。
    工厂模式一般分为简单工厂、工厂、抽象工厂3种情况,属于创建型设计模式。
    2、简单工厂设计模式
    (1)定制抽象产品接口;
    (2)定制具体产品子类;
    (3)定制工厂类,简单工厂类的特点:它是一个具体的类,非接口或抽象类。其中有一个重要的create()方法,利用if...else或switch开关创建所需产品,并返回。

    [代码]java代码:

    1
    2
    3
    4
    5
    package com.example.demo6;
    //定义小汽车接口
    public interface ICar {
        //由于工厂模式仅关系对象的创建,为说明方便,无需定义方法
    }

    [代码]java代码:

    1
    2
    3
    4
    5
    package com.example.demo6;
    //高档小汽车
    public class TopCar implements ICar {
     
    }

    [代码]java代码:

    1
    2
    3
    4
    5
    package com.example.demo6;
    //中档小汽车
    public class MidCar implements ICar {
     
    }

    [代码]java代码:

    1
    2
    3
    4
    5
    package com.example.demo6;
    //低档小汽车
    public class LowCar implements ICar {
     
    }

    [代码]java代码:

    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    14
    15
    16
    17
    18
    package com.example.demo6;
    //简单工厂
    public class CarSimpleFactory {
        public static final String TOPTYPE="toptype";
        public static final String MIDTYPE="midtype";
        public static final String LOWTYPE="lowtype";
        public static ICar create(String mark){
            ICar obj=null;
            if(mark.equals(TOPTYPE)){  //如果是高档类型
                obj=new TopCar();       //则创建高档车对象
            }else if(mark.equals(MIDTYPE)){
                obj=new MidCar();
            }else if(mark.equals(LOWTYPE)){
                obj=new LowCar();
            }
            return obj;         //返回选择的对象
        }
    }

    [代码]java代码:

    1
    2
    3
    4
    5
    6
    7
    8
    package com.example.demo6;
    //测试程序
    public class CarTest {
        public static void main(String[] args) {
            //从工厂中创建对象
            ICar obj=CarSimpleFactory.create("toptype");
        }
    }
    3、工厂模式
    (1)定制抽象产品接口;
    (2)定制具体产品子类;
    (3)定制抽象工厂类(或接口),其中有一个重要的create()抽象方法;
    (4)定制具体工厂子类。

    [代码]java代码:

    1
    2
    3
    4
    5
    package com.example.demo8;
    //定义小汽车接口
    public interface ICar {
     
    }

    [代码]java代码:

    1
    2
    3
    4
    5
    package com.example.demo8;
    //高档小汽车
    public class TopCar implements ICar {
     
    }

    [代码]java代码:

    1
    2
    3
    4
    5
    package com.example.demo8;
    //中档小汽车
    public class MidCar implements ICar {
     
    }

    [代码]java代码:

    1
    2
    3
    4
    5
    package com.example.demo8;
    //低档小汽车
    public class LowCar implements ICar {
     
    }

    [代码]java代码:

    1
    2
    3
    4
    5
    package com.example.demo8;
    //定义抽象工厂
    public abstract class AbstractFactory {
        public abstract ICar create();
    }

    [代码]java代

    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    package com.example.demo8;
    //定义高档小汽车工厂
    public class TopFactory extends AbstractFactory {
     
        @Override
        public ICar create() {
            return new TopCar();//高档工厂生成高档小气车对象
        }
     
    }

    [代码]java代码:

    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    package com.example.demo8;
    //定义中档小汽车工厂
    public class MidFactory extends AbstractFactory {
     
        @Override
        public ICar create() {
            return new LowCar();//低档工厂生成低档小汽车对象
        }
     
    }

    [代码]java代码:

    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    package com.example.demo8;
    //定义低档小汽车工厂
    public class LowFactory extends AbstractFactory {
     
        @Override
        public ICar create() {
            return new MidCar();//低档工厂生成中档小汽车
        }
     
    }

    [代码]java代码:

    1
    2
    3
    4
    5
    6
    7
    8
    package com.example.demo8;
    //测试类
    public class CarTest {
        public static void main(String[] args) {
            AbstractFactory obj=new TopFactory();//多态创建高档工厂
            ICar car=obj.create();      //获得高档工厂中的小汽车对象
        }
    }
    4、工厂与简单工厂模式的区别。
    (1)工厂模式把简单工厂中具体的工厂类划分为两层:抽象工厂层+具体工厂子类层。抽象工厂层的划分丰富了程序框架的内涵,符合从一般到特殊的语义特点。
    (2)create()方法参数的理解:在简单工厂中,create(String mark)是成员方法,表明在该方法中管理多个产品,根据mark的值产生并返回ICar对象;在工厂模式中,create()是抽象方法,无参数,表明在具体的子类工厂中创建某个具体的产品。
    (3)工厂方法更易于软件的二次开发及维护,主要特征是:当需求分析变化时,只需要增加、删除相应的类,而不是修改已有的类。
    5、抽象工厂
    (1)定制抽象产品接口;
    (2)定制具体产品类子类;
    (3)定制抽象工厂类(或接口),其中有两个重要的create()抽象方法;
    (4)定制具体工厂子类,每个工厂子类中重写create()方法。

    [代码]java代码:

    1
    2
    3
    package com.example.demo9;
    //定义小汽车接口
    public interface ICar {}

    [代码]java代码:

    1
    2
    3
    package com.example.demo9;
    //定义高档小汽车类
    public class TopCar implements ICar {}

    [代码]java代码:

    1
    2
    3
    package com.example.demo9;
    //定义中档小汽车类
    public class MidCar implements ICar {}

    [代码]java代码:

    1
    2
    3
    package com.example.demo9;
    //定义低档小汽车类
    public class LowCar implements ICar {}

    [代码]java代码:

    1
    2
    3
    package com.example.demo9;
    //定义公共汽车接口
    public interface IBus {}

    [代码]java代码:

    1
    2
    3
    package com.example.demo9;
    //定义高档公共汽车类
    public class UpBus implements IBus {}

    [代码]java代码:

    1
    2
    3
    package com.example.demo9;
    //定义中档公共汽车类
    public class MidBus implements IBus {}

    [代码]java代码:

    1
    2
    3
    package com.example.demo9;
    //定义低档公共汽车类
    public class DnBus implements IBus {}

    [代码]java代码:

    1
    2
    3
    4
    5
    6
    package com.example.demo9;
    //定义抽象工厂
    public abstract class AbstractFactory {
        public abstract ICar createCar();//产生小汽车对象
        public abstract IBus createBus();//产生公共汽车对象
    }

    [代码]java代码:

    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    14
    15
    package com.example.demo9;
    //定义高档工厂
    public class TopFactory extends AbstractFactory {
     
        @Override
        public ICar createCar() {
            return new TopCar();//高档工厂生成高档小汽车对象
        }
     
        @Override
        public IBus createBus() {
            return new UpBus();//高档工厂生成高档公共汽车对象
        }
     
    }

    [代码]java代码:

    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    14
    15
    package com.example.demo9;
    //定义中档工厂
    public class MidFactory extends AbstractFactory {
     
        @Override
        public ICar createCar() {
            return new MidCar();//中档工厂生成中档小汽车
        }
     
        @Override
        public IBus createBus() {
            return new MidBus();//中档工厂生成中档公共汽车
        }
     
    }

    [代码]java代码:

    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    14
    15
    package com.example.demo9;
    //定义低档工厂
    public class LowFactory extends AbstractFactory {
     
        @Override
        public ICar createCar() {
            return new LowCar();//低档工厂生成低档小汽车对象
        }
     
        @Override
        public IBus createBus() {
            return new DnBus();//低档工厂生成低档公共汽车对象
        }
     
    }
  • 相关阅读:
    实用工具分享
    美国西储大学轴承数据解读
    CSDN去广告插件
    [教程]SPSS for Mac 安装教程
    [教程]Ubuntu 安装 Docker CE
    [教程]Windows操作系统下安装Ubuntu虚拟机
    Chrome视频解析插件
    [软件]MATLAB小波包的分解与重构
    [信号处理]奈奎斯特采样定理
    [软件]LabVIEW编程实例:如何通过TCP协议进行数据通信
  • 原文地址:https://www.cnblogs.com/android-blogs/p/5631966.html
Copyright © 2011-2022 走看看