java设计模式2————工厂模式

1、工厂模式介绍:

1.1、实现了创建者与调用者的分离

1.2、详细分类:

简单工厂模式

工厂方法模式

抽象工厂模式

1.3、所遵循的OOP原则:

开闭原则:对扩展开放,对修改关闭

依赖倒转原则:面向接口编程

迪米特法则:只与你直接的朋友进行通信,而避免与陌生人进行通信。

1.4、核心本质

实例化对象,不使用new,用工厂方法代替

将调用者与我们的实现类解耦

1.5、三种模式

2、简单工厂模式

2.1、先建立汽车抽象类

package com.xgp.company.第二种_工厂模式.简单工厂模式;

public interface Car {

void name();

}

2.2、制造车

制造“五凌”车

package com.xgp.company.第二种_工厂模式.简单工厂模式;

public class WuLing implements Car {

@Override

public void name() {

System.out.println("五凌宏观");

}

}

制造“特斯拉”车

package com.xgp.company.第二种_工厂模式.简单工厂模式;

public class Tesla implements Car {

@Override

public void name() {

System.out.println("特斯拉");

}

}

2.3、创建汽车工厂(两种方式工厂制造对像)

package com.xgp.company.第二种_工厂模式.简单工厂模式;

/**

* 简单工厂模式,又成为静态工厂模式

* 弊端:增加一个新产品时,如果你不修改代码,做不到

*/

/**汽车工厂

*/

public class CarFactory {

public static Car getCar(String car) {

if("五凌".equals(car)) return new WuLing();

if("特斯拉".equals(car)) return new Tesla();

return null;

}

/**

第二种方式

@return

*/

public static Car getWuLing() {

return new WuLing();

}

public static Car getTesla() {

return new Tesla();

}

}

2.4、建立买车类(传统方法创建对象被注释了和通过工厂创建对象)

package com.xgp.company.第二种_工厂模式.简单工厂模式;

/**买车

/

public class Consumer {

/ //*

传统的方式

@param args

//

public static void main(String[] args) {

//弊端:需要了解接口和所有的实现类

Car car1 = new WuLing();

Car car2 = new Tesla();

car1.name();

car2.name();

}*/

/**简单工厂模式

@param args

*/

public static void main(String[] args) {

Car car1 = CarFactory.getCar("五凌");

Car car2 = CarFactory.getCar("特斯拉");

car1.name();

car2.name();

}

}

2.5、缺点:如果要增加一个“大众”的汽车,还需要修改工厂代码

package com.xgp.company.第二种_工厂模式.简单工厂模式;

/**弊端:增加实现类时需要改工厂类的代码

*/

public class Dazhong implements Car {

@Override

public void name() {

System.out.println("大众");

}

}

2.6、运行结果

五凌宏观

特斯拉

2.7、UML类图

3、工厂方法模式

3.1、建立汽车抽象类

package com.xgp.company.第二种_工厂模式.工厂方法模式;

public interface Car {

void name();

}

3.2、创建车

创建“五凌”车

package com.xgp.company.第二种_工厂模式.工厂方法模式;

public class WuLing implements Car {

@Override

public void name() {

System.out.println("五凌宏观");

}

}

创建“特斯拉”车

package com.xgp.company.第二种_工厂模式.工厂方法模式;

public class Tesla implements Car {

@Override

public void name() {

System.out.println("特斯拉");

}

}

3.3、创建汽车工厂的抽象类

package com.xgp.company.第二种_工厂模式.工厂方法模式;

public interface CarFactory {

Car getCar();

}

3.4、创建汽车工厂

创建制造“五凌”车的汽车工厂

package com.xgp.company.第二种_工厂模式.工厂方法模式;

public class WuLingFactory implements CarFactory {

@Override

public Car getCar() {

return new WuLing();

}

}

创建制造“特斯拉”车的汽车工厂

package com.xgp.company.第二种_工厂模式.工厂方法模式;

public class TeslaFactory implements CarFactory {

@Override

public Car getCar() {

return new Tesla();

}

}

3.5、新增一辆“大众”车

新增一辆“大众”车

package com.xgp.company.第二种_工厂模式.工厂方法模式;

/**弊端:增加实现类时需要改工厂类的代码

*/

public class Dazhong implements Car {

@Override

public void name() {

System.out.println("大众");

}

}

新增一辆“大众”车的汽车工厂

package com.xgp.company.第二种_工厂模式.工厂方法模式;

public class DazhongFactory implements CarFactory {

@Override

public Car getCar() {

return new Dazhong();

}

}

3.6、创建消费者类

package com.xgp.company.第二种_工厂模式.工厂方法模式;

/**买车

*/

public class Consumer {

public static void main(String[] args) {

Car car1 = new WuLingFactory().getCar();

Car car2 = new TeslaFactory().getCar();

Car car3 = new DazhongFactory().getCar();

car1.name();

car2.name();

car3.name();

}

//根据设计原则:工厂方法模式

//更据实际业务:简单工厂模式

}

3.7、弊端:增加实现类时需要改工厂类的代码

总结:

根据设计原则:工厂方法模式

更据实际业务:简单工厂模式

3.8、UML类图

4、小节

5、抽象工厂模式

5.1、该模式介绍

5.2、UML类图设计

5.3、创建生产产品种类的抽象类

package com.xgp.company.第二种_工厂模式.抽象工厂模式;

/**抽象产品工厂

*/

public interface IProductFactory {

//生产手机

IPhoneProduct iphoneProduct();

//生产路由器

IRouterProduct routerProduct();

}

5.4、创建手机和路由器的抽象接口

手机:

package com.xgp.company.第二种_工厂模式.抽象工厂模式;

/**手机接口

*/

public interface IPhoneProduct {

void start(); //开机

void shutdown(); //关机

void callup(); //打电话

void sendSMS(); //发短信

}

路由器:

package com.xgp.company.第二种_工厂模式.抽象工厂模式;

/**路由器产品接口

*/

public interface IRouterProduct {

void start(); //开机

void shutdown(); //关机

void openWifi(); //打开网络

void setting(); //设置参数

}

5.5、创建小米工厂

package com.xgp.company.第二种_工厂模式.抽象工厂模式;

public class XiaomiFactory implements IProductFactory {

@Override

public IPhoneProduct iphoneProduct() {

return new XiaomiPhone();

}

@Override

public IRouterProduct routerProduct() {

return new XiaomiRouter();

}

}

5.6、小米工厂制造小米手机、小米路由器

制造小米手机:

package com.xgp.company.第二种_工厂模式.抽象工厂模式;

/**小米手机

*/

public class XiaomiPhone implements IPhoneProduct {

@Override

public void start() {

System.out.println("开启小米手机");

}

@Override

public void shutdown() {

System.out.println("关闭小米手机");

}

@Override

public void callup() {

System.out.println("小米打电话");

}

@Override

public void sendSMS() {

System.out.println("小米发短信");

}

}

制造小米路由器:

package com.xgp.company.第二种_工厂模式.抽象工厂模式;

/**

小米路由器

*/

public class XiaomiRouter implements IRouterProduct {

@Override

public void start() {

System.out.println("开启小米路由器");

}

@Override

public void shutdown() {

System.out.println("关闭小米路由器");

}

@Override

public void openWifi() {

System.out.println("小米网络");

}

@Override

public void setting() {

System.out.println("小米参数");

}

}

5.7、创建华为工厂

package com.xgp.company.第二种_工厂模式.抽象工厂模式;

public class HuaweiFactory implements IProductFactory {

@Override

public IPhoneProduct iphoneProduct() {

return new HuaweiPhone();

}

@Override

public IRouterProduct routerProduct() {

return new HuaweiRouter();

}

}

5.8、华为工厂制造华为手机、华为路由器

制造华为手机:

package com.xgp.company.第二种_工厂模式.抽象工厂模式;

/**华为手机

*/

public class HuaweiPhone implements IPhoneProduct {

@Override

public void start() {

System.out.println("开启华为手机");

}

@Override

public void shutdown() {

System.out.println("关闭华为手机");

}

@Override

public void callup() {

System.out.println("华为手机打电话");

}

@Override

public void sendSMS() {

System.out.println("华为手机发短信");

}

}

制造华为路由器:

package com.xgp.company.第二种_工厂模式.抽象工厂模式;

public class HuaweiRouter implements IRouterProduct {

@Override

public void start() {

System.out.println("开启华为路由器");

}

@Override

public void shutdown() {

System.out.println("关闭华为路由器");

}

@Override

public void openWifi() {

System.out.println("华为网络");

}

@Override

public void setting() {

System.out.println("华为参数");

}

}

5.9、根据工厂制造产品

package com.xgp.company.第二种_工厂模式.抽象工厂模式;

public class Client {

public static void main(String[] args) {

System.out.println("小米系列产品=");

//小米工厂

XiaomiFactory xiaomiFactory = new XiaomiFactory();

//小米手机

IPhoneProduct iphoneProduct = xiaomiFactory.iphoneProduct();

iphoneProduct.start();

iphoneProduct.callup();

iphoneProduct.sendSMS();

iphoneProduct.shutdown();

//小米路由器

IRouterProduct routerProduct = xiaomiFactory.routerProduct();

routerProduct.start();

routerProduct.openWifi();

routerProduct.setting();

routerProduct.shutdown();

System.out.println("================华为系列产品=================");

//华为工厂

HuaweiFactory huaweiFactory = new HuaweiFactory();

//华为手机

iphoneProduct = huaweiFactory.iphoneProduct();

iphoneProduct.start();

iphoneProduct.callup();

iphoneProduct.sendSMS();

iphoneProduct.shutdown();

//华为路由器

routerProduct = huaweiFactory.routerProduct();

routerProduct.start();

routerProduct.openWifi();

routerProduct.setting();

routerProduct.shutdown();

}

}

5.10、运行结果

================小米系列产品=================

开启小米手机

小米打电话

小米发短信

关闭小米手机

开启小米路由器

小米网络

小米参数

关闭小米路由器

================华为系列产品=================

开启华为手机

华为手机打电话

华为手机发短信

关闭华为手机

开启华为路由器

华为网络

华为参数

关闭华为路由器

进程完成,退出码 0

5.11、实际的UML类图

分析:

java 设计模式 路由器_java设计模式2————工厂模式相关推荐

  1. java 设计模式 路由器_Java设计模式——工厂模式

    工厂模式 本质:创建对象不使用new而使用工厂方法代替. 简单工厂模式 工厂所管理的类的统一接口:Productpublic interface Product { void work(); } 具体 ...

  2. java 反射抽象_Java实现抽象工厂模式+java的反射的机制

    Java的反射机制: JAVA反射机制是就是运行的状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法 ...

  3. 【Java设计模式】简单学抽象工厂模式——你好,微信还是支付宝

    目录 说明 实现方式 自问自答 其他链接 说明 五大创建型模式之一,其他还有单例模式.原型模式.建造者模式.工厂模式. 抽象工厂模式(Abstract Factory Pattern):定义了一个in ...

  4. Java设计模式(二)简单工厂模式—设计模式六大原则

    文章目录 设计模式六大原则 1. 开闭原则 2. 里氏代换原则 3. 依赖倒转原则 4. 接口隔离原则 5. 迪米特法则(最少知道原则) 6. 合成复用原则 工厂设计模式 什么是工厂模式 工厂模式的好 ...

  5. 设计模式C#描述之——简单工厂模式、抽象工厂模式、单例与多例模式

    设计模式C#描述之--简单工厂模式 前 言:设计模式是软件开发领域的精髓之一.学好设计模式是目前每一个开发人员的必修课.目前关于设计模式的书很多,其中比较好的有GOF那本的中译本,但并 不很适合初学者 ...

  6. 设计模式(1)--简单工厂模式、策略模式

    设计模式(1)--简单工厂模式.策略模式 1. 简单工厂模式 在阎宏博士的<JAVA与模式>一书中开头是这样描述简单工厂模式的:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static ...

  7. 设计模式(6)——抽象工厂模式(Abstract Factory Pattern,创建型)

    1.概述 使用设计模式可以提高代码的可复用性.可扩充性和可维护性.抽象工厂模式(Abstract Factory Pattern)属于创建型模式,为创建一组相关或者相互依赖的对象(产品族)提供一个抽象 ...

  8. 设计模式(4)—— 简单工厂模式(Simple Factory,创建型)

    1.概述 使用设计模式可以提高代码的可复用性.可扩充性和可维护性.简单工厂模式(Simple Factory Pattern)属于创建型模式.简单工厂模式,由一个工厂对象决定创建出哪一种产品类的实例, ...

  9. 格力电器Java面试题_JAVA设计模式学习--工厂模式

    今天谈一下对工厂模式学习的总结. 看完视频和文章之后要自己表述工厂模式,总是感觉无从说起,不知道怎么去定义工厂模式,反复看了几遍之后终于理解一点. 自己理解工厂模式是通过这两种模式的特点来理解和定义的 ...

最新文章

  1. 赠送24本Spring boot+cloud套书!看完炒老板鱿鱼!
  2. hostapd中扫描的调用过程
  3. 【PC工具】chrome插件: Github 项目代码树形格式展示工具octotree
  4. 毕业设计——学术交流管理系统的设计与实现-1
  5. Cocos2d-x创建包边字
  6. 利用nginx的301重定向到另外服务器
  7. php怎么分割页面,将一个页面分成多个html文件(静态html分割页面)
  8. 信息学奥赛一本通 2070:【例2.13】数字对调
  9. python安装教程(Windows最新)
  10. 使用Python成功调用大漠插件方法
  11. php函数体用return,php递归函数使用return问题
  12. firemonkey mysql,Firemonkey移动应用程序和远程MySQL
  13. st7789 旋转_ESP32驱动ST7789液晶屏
  14. 今天是星期一,两天后是星期三,5天后是星期六;今天是星期六,3天后是星期二。
  15. cf英文名字格式好看的_cf好看的英文名字格式
  16. iOS中检测硬件和传感器
  17. 朋友合作怎么迈过利益这道坎
  18. python解释器种类及特点_【Python面试】 说说Python解释器种类以及特点?
  19. 自定义数码管IP核,并让NiosⅡ SBT for Eclipse自动抓取驱动文件
  20. 界面设计常用的几种配色风格及文字底色

热门文章

  1. 计算机怎么取消用户密码,怎么取消开机密码:计算机开机进入Windows时的开机密码怎么取消?...
  2. 各种坐标系下坐标转换关系
  3. 喜讯 安超云正式成为“同心生态联盟”会员单
  4. 数字集成电路与系统设计
  5. 【网址】收藏一下会死啊!
  6. 1688搜索新品API接口-(按关键字搜索新品数据API接口)
  7. 计算机专业英语09章在线测,審计学第09章在线测试.doc
  8. 初学AI的你也能一键部署模型服务?奥利给!!
  9. 团体程序设计天梯赛-习题集部分题解(大牛勿喷)
  10. windows7、ubuntu双系统安装