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

    }

}

时间: 2024-10-07 05:51:05

设计模式Day01的相关文章

android 高级 day01

一. 目标:独立完成Android客户端的开发 做项目,一般规模一般难度的   80% 1. 一般项目规模 15个页面左右 代码量:2~3万 2. 一般难度 稍微复杂的UI 常用的功能 有难度的功能:实时语音或视频通讯 高级职位,项目经理或架构师需要掌握的技能: 1. 精通主流手机平台下的高性能编程及性能调优 2. 熟悉设计模式 3. 有很强的解决,分析,调试技术问题的能力 二. Android项目开发流程和角色 流程:CMM 瀑布模型 大中型公司的人员配备 项目经理 1. 收集需求 售前 2.

Java设计模式——创建型模式之单例模式

一.概述 作为第一个出场的设计模式,有必要先介绍一下设计模式(引用自百度百科): 设计模式(Design Pattern)是一套被反复使用.多数人知晓的.经过分类的.代码设计经验的总结. 使用设计模式的目的:为了代码可重用性.让代码更容易被他人理解.保证代码可靠性. 设计模式使代码编写真正工程化:设计模式是软件工程的基石脉络,如同大厦的结构一样. 设计模式概念的介绍,参见:http://blog.jobbole.com/101076/ 其中涉及的设计原则的概念,参见随笔:http://www.c

10大APP界面框架设计模式详解

随着移动互联网的发展,移动app已经成为了每个互联网公司的标配了,那作为产品经理,我们如何设计出更加符合用户体验的app产品呢?今天和大家分享的就是10中最常见的app界面光甲设计模式,一起来看看吧. 1.标签导航 标签导航是十大界面框架设计里最常用的界面框架设计,也是被业界之内公认的一种普遍使用的页面框架设计.那么这种页面框架设计在作业方面对一个用户来说也是最常见的一种页面框架设计,比如说微博.微信.手机百度.支付宝.淘宝,这些我们所谓的超级APP都是运用的标签导航,无一例外.从这个角度也可以

[js高手之路]设计模式系列课程-组合模式+寄生组合继承实战新闻列表

所谓组合模式,就是把一堆结构分解出来,组成在一起,现实中很多这样的例子,如: 1.肯德基套餐就是一种组合模式, 比如鸡腿堡套餐,一般是是由一个鸡腿堡,一包薯条,一杯可乐等组成的 2.组装的台式机同理,由主板,电源,内存条,显卡, 机箱,显示器,外设等组成的 把一个成型的产品组成部件,分成一个个独立的部件,这种方式可以做出很多灵活的产品,这就是组合模式的优势 比如:家用台式机电脑,要求配置比较低, 这个时候只需要主板+电源+内存条+机箱+显示器+外设就可以了,不需要配置独立显卡 鸡腿堡+鸡翅+紫薯

Happy 设计模式之适配器模式(JAVA)

设计模式-适配器模式 适配器模式定义 适配器模式,将一个类的的接口转换成客户或者产品希望的接口形式,就是原本不兼容或者甚至不相干的接口不能一起工作的接口一起工作,完成需求或者客户的需求. 适配器模式的使用场景 1.当你使用一个已经存在的类,而他的接口不符合你的需求. 2.你想要创建一个复用的类,该类可以与其相关的类或者不可见的类协同工作. 适配器角色 Target:目标接口 TargetImpl:目标实现类 Adapter:适配器 Adaptee:被适配者 代码解析: package com.d

设计模式 2/23 工厂模式

工厂模式是最常用的设计模式之一,用好了,代码优雅,可维护性高,对系统设计会上一个台阶 为什么这么说,因为工厂模式可以牵扯出抽象工厂模式,也有大家都会聊到的简单工厂模式 我们要了解一点,23中设计模式中,不包含简单工厂模式,之所以大家会去聊这个,四个字,渐进明细 通过对简单工厂模式的了解,我们引入工厂这个词,不然一个写代码的,天天给他讲工厂,工厂,工厂,西厂,东厂,会晕 同时,通过逐步的深入,从简单工厂,到工厂模式,再到抽象工厂,渐进明细的过程,逐步深入的理解,比较优劣,择优而为我们所用. 试想我

Java设计模式学习笔记,一:单例模式

开始学习Java的设计模式,因为做了很多年C语言,所以语言基础的学习很快,但是面向过程向面向对象的编程思想的转变还是需要耗费很多的代码量的.所有希望通过设计模式的学习,能更深入的学习. 把学习过程中的笔记,记录下来,只记干货. 第一部分:单例模式的内容 单例模式:类只能有一个实例. 类的特点:1.私有构造器:2.内部构造实例对象:3.对外提供获取唯一实例的public方法. 常见的单例模式实现有五种形式: 1.饿汉式. 2.懒汉式. 3.双重检查锁式. 4.静态内部类式. 5.枚举式. 以下分别

设计模式之单列模式

设计模式之单列模式 1,何为单列模式? 即singleton 在某个类采用了单列模式之后  其只能有一个实列对象 ,并且这个实列对象只能有内部自己创建并提供给外部的调用. 2.实现单列模式的方法 分为 :饿汉式 ,懒汉式 下面为饿汉式实现代码: public calss Singleton1{ //将构造函数私有化 防止外部通过new来创建对象 private Singleton1(){ } //创建一个私有静态变量并直接初始化 类加载的时候直接创建对象 private static Singl

设计模式之原型模式(Prototype)

1.初识原型模式 大家都知道连锁机构是现在灰常流行的商业模式,比如咖啡之翼,那么假设咖啡之翼要在长春新建立一个分店,所经营的产品和以前在其他的城市已经存在的店经营的产品差不多,那么面向对象开发的角度怎么解决这个问题呢?难道要重新的实例化一个咖啡之翼的店??这显然不太好吧,咖啡之翼里面经营的产品(假设是属性吧)都需要重新写,这就是在做大量的重复工作啊,这显然是不符合OO开发思想的.遇到这样的情况,并不是重新建立一个类来解决这样的问题,而是通过设计模式中的"原型模式"来解决这种问题.是这种