【GOF23设计模式】工厂模式

来源:http://www.bjsxt.com/ 
一、【GOF23设计模式】_简单工厂模式详解、面向对象设计原则、开闭原则、依赖反转原则、迪米特法则 

没有工厂模式的情况

 1 package com.test.factory.simple;
 2
 3 public interface Car {
 4     public void run();
 5 }
 6
 7 package com.test.factory.simple;
 8
 9 public class Audi implements Car{
10     @Override
11     public void run() {
12         System.out.println("奥迪在跑");
13     }
14 }
15
16 package com.test.factory.simple;
17
18 public class Byd implements Car{
19     @Override
20     public void run() {
21         System.out.println("比亚迪在跑");
22     }
23 }
 1 package com.test.factory.simple;
 2 /**
 3  * 测试没有工厂模式的情况下
 4  */
 5 public class Client01 { //调用者   依赖Audi、Byd
 6     public static void main(String[] args) {
 7         Car c1 = new Audi();
 8         Car c2 = new Byd();
 9
10         c1.run();
11         c2.run();
12     }
13 }

简单工厂模式的情况

 1 package com.test.factory.simple;
 2
 3 public class CarFactory {
 4     public static Car createCar(String type){
 5         if("奥迪".equals(type)){
 6             return new Audi();
 7         }else if("比亚迪".equals(type)){
 8             return new Byd();
 9         }else{
10             return null;
11         }
12     }
13 }
 1 package com.test.factory.simple;
 2 /**
 3  * 简单工厂情况下
 4  */
 5 public class Client02 { //调用者   不依赖Audi、Byd
 6     public static void main(String[] args) {
 7         Car c1 = CarFactory.createCar("奥迪");
 8         Car c2 = CarFactory.createCar("比亚迪");
 9
10         c1.run();
11         c2.run();
12     }
13 }

 
或者

 1 package com.test.factory.simple;
 2
 3 public class CarFactory2 {
 4     public static Car createAudi(){
 5         return new Audi();
 6     }
 7     public static Car createByd(){
 8         return new Byd();
 9     }
10 }
 1 package com.test.factory.simple;
 2 /**
 3  * 简单工厂情况下
 4  */
 5 public class Client03 { //调用者   不依赖Audi、Byd
 6     public static void main(String[] args) {
 7         Car c1 = CarFactory2.createAudi();
 8         Car c2 = CarFactory2.createByd();
 9
10         c1.run();
11         c2.run();
12     }
13 }

二、【GOF23设计模式】_工厂方法模式详解

 1 package com.test.factory.factorymethod;
 2
 3 public interface Car {
 4     public void run();
 5 }
 6
 7 package com.test.factory.factorymethod;
 8
 9 public class Audi implements Car{
10     @Override
11     public void run() {
12         System.out.println("奥迪在跑");
13     }
14 }
15
16 package com.test.factory.factorymethod;
17
18 public class Byd implements Car{
19     @Override
20     public void run() {
21         System.out.println("比亚迪在跑");
22     }
23 }
 1 package com.test.factory.factorymethod;
 2
 3 public interface CarFactory {
 4     Car createCar();
 5 }
 6
 7 package com.test.factory.factorymethod;
 8
 9 public class AudiFactory implements CarFactory{
10     @Override
11     public Car createCar() {
12         return new Audi();
13     }
14 }
15
16 package com.test.factory.factorymethod;
17
18 public class BydFactory implements CarFactory{
19     @Override
20     public Car createCar() {
21         return new Byd();
22     }
23 }
 1 package com.test.factory.factorymethod;
 2
 3 public class Client {
 4     public static void main(String[] args) {
 5         Car c1 = new AudiFactory().createCar();
 6         Car c2 = new BydFactory().createCar();
 7
 8         c1.run();
 9         c2.run();
10     }
11 }

三、【GOF23设计模式】_抽象工厂模式详解 

 1 package com.test.factory.abstractfactory;
 2
 3 public interface Engine {
 4     void run();
 5     void start();
 6 }
 7
 8 class LuxuryEngine implements Engine{
 9     @Override
10     public void run() {
11         System.out.println("转得快");
12     }
13
14     @Override
15     public void start() {
16         System.out.println("启动快!可以自动启停");
17     }
18 }
19
20 class LowEngine implements Engine{
21     @Override
22     public void run() {
23         System.out.println("转得慢");
24     }
25
26     @Override
27     public void start() {
28         System.out.println("启动慢!");
29     }
30 }
 1 package com.test.factory.abstractfactory;
 2
 3 public interface Seat {
 4     void massage();
 5 }
 6
 7 class LuxurySeat implements Seat{
 8     @Override
 9     public void massage() {
10         System.out.println("可以自动按摩");
11     }
12 }
13
14 class LowSeat implements Seat{
15     @Override
16     public void massage() {
17         System.out.println("不能按摩");
18     }
19 }
 1 package com.test.factory.abstractfactory;
 2
 3 public interface Tyre {
 4     void revolve();
 5 }
 6
 7 class LuxuryTyre implements Tyre{
 8     @Override
 9     public void revolve() {
10         System.out.println("旋转不磨损");
11     }
12 }
13
14 class LowTyre implements Tyre{
15     @Override
16     public void revolve() {
17         System.out.println("旋转磨损快");
18     }
19 }
1 package com.test.factory.abstractfactory;
2
3 public interface CarFactory {
4     Engine createEngine();
5     Seat createSeat();
6     Tyre createTyre();
7 }
 1 package com.test.factory.abstractfactory;
 2
 3 public class LuxuryFactory implements CarFactory{
 4
 5     @Override
 6     public Engine createEngine() {
 7         return new LuxuryEngine();
 8     }
 9
10     @Override
11     public Seat createSeat() {
12         return new LuxurySeat();
13     }
14
15     @Override
16     public Tyre createTyre() {
17         return new LuxuryTyre();
18     }
19 }
 1 package com.test.factory.abstractfactory;
 2
 3 public class LowFactory implements CarFactory{
 4
 5     @Override
 6     public Engine createEngine() {
 7         return new LowEngine();
 8     }
 9
10     @Override
11     public Seat createSeat() {
12         return new LowSeat();
13     }
14
15     @Override
16     public Tyre createTyre() {
17         return new LowTyre();
18     }
19 }
 1 package com.test.factory.abstractfactory;
 2
 3 public class Client {
 4     public static void main(String[] args) {
 5         CarFactory factory = new LuxuryFactory();
 6         Engine e = factory.createEngine();
 7         e.run();
 8         e.start();
 9     }
10 }

时间: 2024-10-17 08:43:06

【GOF23设计模式】工厂模式的相关文章

6.大话设计模式-工厂模式

工厂模式和简单工厂有什么区别.废话不多说,对比第一篇例子应该很清楚能看出来. 优点: 工厂模式弥补了简单工厂模式中违背开放-封闭原则,又保持了封装对象创建过程的优点. using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks; namespace DesignModel{    public interface Factory   

设计模式---工厂模式---生产水果

设计模式---工厂模式 需要一个基本的抽象类:相当一个基本的工厂 需要若干个具体类:相当若干个产品 需要工具类:相当工厂中机器,用来选择不同的产品生产 需要主类:相当顾客所想的订单 主类 ----> 工厂类 ----> 产品类 ---> 产品具体类 老板根据顾客的订单,在工具堆中选择合适的,然后去工厂中生产适合的产品,返回给顾客 优势:能够在不修改原先的代码情况,增加所需的类与方法. 不足:会增多类文件的数量 接口:提供的内容,相当于协议,即外界使用此接口时,接口的内容是不允许外界对接口

设计模式——工厂模式学习

1.概念 工厂模式定义:实例化对象,用工厂方法代替new操作.达到解耦的目的(避免硬编码耦合).工厂方法模式是类的创建模式,又叫做虚拟构造子(Virtual Constructor)模式或者多态性工厂(Polymorphic Factory)模式. 工厂模式是我们最常用的模式了,著名的Jive论坛 ,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见.因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=new A() 工厂模式也是用来创建实例

二十三种设计模式——工厂模式

二十三种设计模式--工厂模式 简单工厂模式 简单工厂模式又称静态工厂方法(StaticFactory Method)模式,不属于23种模式之一. 简单工厂模式是工厂模式最简单使用的模式. 类图: 程序: #include <iostream> #include<string> using namespace std; class NationalFlag//父类 { public: NationalFlag(){} ~NationalFlag(){} virtual void di

设计模式-工厂模式[Factory]

先看下一个简单的实现: 1 package org.masque.designpatterns.factorymethod.one; 2 /** 3 * 4 * Description: Sample子类的标示 5 * BeanEm.java Create on 2014年7月11日 下午2:37:58 6 * @author [email protected] 7 * @version 1.0 8 * Copyright (c) 2014 Company,Inc. All Rights Res

5分钟读书笔记之 - 设计模式 - 工厂模式

一个类或者对象中,往往会包含别的对象.在创建这种对象的时候,你可能习惯于使用常规方式,即用 new 关键字和类构造函数. 这会导致相关的俩个类之间产生依赖. 工厂模式,就是消除这俩个类之间的依赖性的一种模式,它使用一种方法来决定究竟实例化那个具体的类. 简单工厂模式 假设你想开几个自行车商店,每个商店都有几种型号的自行车出售,可以用这样一个类来表示: var BicycleShop = function(){} BicycleShop.prototype = { sellBicycle:func

java设计模式 GOF23 02 工厂模式

package com.lz.factory.simpleFactory; /* * * 补充:面向对象基本原则 * OCP:(开闭原则)添加新功能不应该修改原有代码,而是添加新的类 * DIP:(依赖倒转原则)依赖接口编程 * LOD:(迪米特法则)降低耦合,只和必要的对象通信 * 静态工厂类 { * 创建者和调用者的分离 * * 简单工厂问题:添加新功能需要修改代码 * } * 工厂方法类{ * 代码过多 * } * 两者比较 * 简单工厂结构代码更简单 * 工厂方法更难维护 * 总结:工厂

java设计模式--工厂模式

总结 (1)简单工厂模式是由一个具体的类去创建其他类的实例,父类是相同的,父类是具体的. (2)工厂方法模式是有一个抽象的父类定义公共接口,子类负责生成具体的对象,这样做的目的是将类的实例化操作延迟到子类中完成. (3)抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无须指定他们具体的类.它针对的是有多个产品的等级结构.而工厂方法模式针对的是一个产品的等级结构. 一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java

设计模式-工厂模式

一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类:1)简单工厂模式(Simple Factory):不利于产生系列产品: 2)工厂方法模式(Factory Method):又称为多形性工厂: 3)抽象工厂模式(Abstract Factory):又称为工具箱,产生产品族,但不利于产生新的产品:             这三种模式从上到下逐步抽象,并且更具一般性.             GOF在<

设计模式——工厂模式

常说的工厂模式一般认为有三种:简单工厂.工厂方法模式.抽象工厂模式.其中简单工厂严格上来说不是一种设计模式,而被认为是一种好的编码习惯/风格. 简单工厂 简单工厂的本质就是封装变化的代码,使客户代码将要面临的改变变少.而且被封装的代码也有了更好的复用性,比如服务多个客户端或者被继承/包装等工具来扩展. 下面以肾5和肾6为对象来说明 //define product(iphone) interface public interface IPhone{ public void model(); }