一、工厂模式
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();//低档工厂生成低档公共汽车对象
    }
 
}

设计模式Day01的更多相关文章

  1. MVVM设计模式和WPF中的实现(四)事件绑定

    MVVM设计模式和在WPF中的实现(四) 事件绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...

  2. java EE设计模式简介

    1.何为设计模式 设计模式提供了对常见应用设计问题的解决方案.在面向对象的编程中,设计模式通常在解决与对象创建和交互相关的问题,而非整体软件架构所面对的大规模问题,它们以样板代码的形式提供了通用的解决 ...

  3. 计算机程序的思维逻辑 (54) - 剖析Collections - 设计模式

    上节我们提到,类Collections中大概有两类功能,第一类是对容器接口对象进行操作,第二类是返回一个容器接口对象,上节我们介绍了第一类,本节我们介绍第二类. 第二类方法大概可以分为两组: 接受其他 ...

  4. 《JavaScript设计模式 张》整理

    最近在研读另外一本关于设计模式的书<JavaScript设计模式>,这本书中描述了更多的设计模式. 一.创建型设计模式 包括简单工厂.工厂方法.抽象工厂.建造者.原型和单例模式. 1)简单 ...

  5. 《JavaScript设计模式与开发实践》整理

    最近在研读一本书<JavaScript设计模式与开发实践>,进阶用的. 一.高阶函数 高阶函数是指至少满足下列条件之一的函数. 1. 函数可以作为参数被传递. 2. 函数可以作为返回值输出 ...

  6. 设计模式之行为类模式大PK

                                        行为类模式大PK 行为类模式包括责任链模式.命令模式.解释器模式.迭代器模式.中介者模式.备忘录模式.观察者模式.状态模式.策略 ...

  7. .NET设计模式访问者模式

    一.访问者模式的定义: 表示一个作用于某对象结构中的各元素的操作.它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作. 二.访问者模式的结构和角色: 1.Visitor 抽象访问者角色,为该 ...

  8. Java开发中的23种设计模式详解

    [放弃了原文访问者模式的Demo,自己写了一个新使用场景的Demo,加上了自己的理解] [源码地址:https://github.com/leon66666/DesignPattern] 一.设计模式 ...

  9. java 设计模式

    目录: 设计模式六大原则(1):单一职责原则 设计模式六大原则(2):里氏替换原则 设计模式六大原则(3):依赖倒置原则 设计模式六大原则(4):接口隔离原则 设计模式六大原则(5):迪米特法则 设计 ...

随机推荐

  1. Oracle SQL的硬解析、软解析、软软解析

    Oracle中每条sql在执行前都要解析,解析分为硬解析.软解析.软软解析. Oracle会缓存DML语句,相同的DML语句会进行软解析.但不会缓存DDL语句,所以DDL每次都做硬解析.硬解析是一个很 ...

  2. 经典好文:android和iOS平台的崩溃捕获和收集

    通过崩溃捕获和收集,可以收集到已发布应用(游戏)的异常,以便开发人员发现和修改bug,对于提高软件质量有着极大的帮助.本文介绍了iOS和android平台下崩溃捕获和收集的原理及步骤,不过如果是个人开 ...

  3. UIImageView加抖动效果(转)

    CGAffineTransform moveRight = CGAffineTransformTranslate(CGAffineTransformIdentity, 20, 0); CGAffine ...

  4. python解决汉诺塔问题

    今天刚刚在博客园安家,不知道写点什么,前两天刚刚学习完python 所以就用python写了一下汉诺塔算法,感觉还行拿出来分享一下 首先看一下描述: from :http://baike.baidu. ...

  5. 一种高斯模糊渐变动画的实现-b

    关于高斯模糊的方式有很多种,但是如果需要模糊渐变,那么对这种高斯模糊算法的性能要求是比较高的,今天这里重点不讨论算法,只是提供一个动画实现的思路.动画效果如下: 高斯模糊渐变动画 //高斯模糊 -(U ...

  6. 第二好用的时间日期选择插件(jscal)

    这个是第二好用的了,支持鼠标滚动选择时间.功能很强大,文档:http://www.dynarch.com/jscal/ 效果图: <!DOCTYPE html PUBLIC            ...

  7. [转]struct实例字段的内存布局(Layout)和大小(Size)

    在C/C++中,struct类型中的成员的一旦声明,则实例中成员在内存中的布局(Layout)顺序就定下来了,即与成员声明的顺序相同,并且在默认情况下总是按照结构中占用空间最大的成员进行对齐(Alig ...

  8. printf在终端输出时改变颜色

    在调试程序时,有时候要输出大量数据,如果让printf/fprintf改变输出数据的颜色,那观察数据就方便多了. 终端的字符颜色是用转义序列控制的,是文本模式下的系统显示功能,和具体的语言无关.转义序 ...

  9. android 安全需要关注

    1.通过签名校验保护,能有效避免应用被二次打包,杜绝盗版应用的产生2.对内存数据进行变换处理和动态跟踪,有效防止数据被获取和修改3.对代码进行加密压缩,可防止破解者还原真实代码逻辑,避免被复制4.多重 ...

  10. rand5()产生rand7()

    http://www.cnblogs.com/dwdxdy/archive/2012/07/28/2613135.html 利用rand5()产生rand7().rand5()产生1到5的整数,ran ...