设计模式那点事读书笔记(1)----工厂方法模式

工厂方法模式: 定义一个创建产品对象的工厂接口,让子类决定实例化哪种实例对象,将实际创建实例对象的工作推迟到子类当中,核心工厂类不再负责具体产品创建.

解决什么问题:

  当子类型可能会有很多,以后需要不断添加不同子类的实现.

  当一个系统尚在框架设计阶段,还不知道将来需要实例化那些具体类时.

  系统设计之初不需要具体对象的概念.

UML:

       

代码结构:

  

代码:

  定义抽象产品:

package com.demo.factory.model;

/**
 * 定义抽象商品
 */
public abstract class AbstractSword {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

  定义实际商品:

package com.demo.factory.model.object;

import com.demo.factory.model.AbstractSword;

/**
 * 具体产品
 */
public class DragonSword extends AbstractSword {
    public DragonSword() {
        this.setName("龙刀");
    }
}

  定义抽象工厂:

package com.demo.factory.itf;

import com.demo.factory.model.AbstractSword;

/**
 * 定义的抽象产品
 */
public interface ISwordFactory {
    AbstractSword createSword();
}

  定义实际工厂:

package com.demo.factory;

import com.demo.factory.itf.ISwordFactory;
import com.demo.factory.model.AbstractSword;
import com.demo.factory.model.object.DragonSword;

/**
 * 定义具体工厂
 */
public class DragonSwordFactory implements ISwordFactory{
    @Override
    public AbstractSword createSword() {
        return new DragonSword();
    }
}

  实现工厂方法:

package main;

import com.demo.factory.DragonSwordFactory;
import com.demo.factory.itf.ISwordFactory;

/**
 * Main方法实现.
 */
public class MainApp {
    public static void main(String[] args) {
        ISwordFactory factory = new DragonSwordFactory();
        factory.createSword();

        System.out.println("生产龙刀");
    }
}

  

 

时间: 2024-11-02 23:36:05

设计模式那点事读书笔记(1)----工厂方法模式的相关文章

大话设计模式读书笔记7——工厂方法模式

工厂方法模式 工厂方法模式(Factory Method):定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法是一个类的实例化延迟到其子类. 工厂方法模式UML结构图 工厂方法模式结构代码 /// <summary> /// 声明'Product' 抽象类 /// </summary> abstract class Product { } /// <summary> /// 声明 'ConcreteProductA' 类,继承Product /// <

易学设计模式看书笔记(3) - 工厂方法模式

二.工厂方法模式 1.动物管理系统的例子 首先,抽象的动物类和具体的动物实现类: public interface Animal{ public void eat(); } public class Tiger implements Animal { public void eat(){ sysout.out.println("老虎会吃"); }; public void run(){ sysout.out.println("老虎会跑"); }; } public

菜鸟学设计模式系列笔记之工厂方法模式

工厂方法模式(Factory Method): Alias :virtual constructory 虚构造器 Intent: 定义一个用于创建对象的接口,让子类决定实例化哪一个类.Factory Method使一个类的实例化延迟到其子类. Motivation:一个框架使用抽象类定义和管理对象之间的关系.这个框架负责去创建这些对象. 工厂方法模式是类的创建模式,又叫做虚拟构造子模式(Virtual Constructor)或者多态性(Polymorphic Factory)工厂模式 工厂方法

Java设计模式从精通到入门四 简单工厂方法模式

简单工厂方法模式 属于23中设计模式中创建型类型. 核心思想:工厂提供创建对象的接口,由子类决定实例化哪一个子类. 来源 ? 设计模式之禅中的例子,女娲造人,通过八卦炉来进行造人,没有烧熟的为白人,烧太熟的为黑人,刚好的为黄种人的例子进行程序展示 女娲作为client,八卦炉为工厂类,人类为具体实现类,有皮肤的区别. UML类图 图一 Factory: 工厂类的接口,根据类类型,提供只能创建Human子类,或者子孙类的方法. HumanFactory: 工厂类的具体实现,通过反射获取该对象. H

设计模式学习总结:(7)工厂方法模式和抽象工厂模式

工厂方法模式应该算是很容易理解的模式,至少从书上看是这样一回事,但是真正深入去理解它一种存在意义却是不容易的(代码量不够-.-).从语法上看,无非就是把面向对象的多态特性封装到了内部工程类,实现运行时多态. 意图: 定义一个用于创建对象的接口,让子类决定实例化哪个类.Factory Method使一个类的实例化延迟到其子类. 结构图: 简单的代码: class AbProduct { public: virtual void sayName()=0; AbProduct(string name)

大话设计模式读书笔记4——模版方法模式

模板方法是一种常见的设计模式,它定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.模板使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. UML图: 具体实现代码: namespace TemplateMethod { class Program { static void Main(string[] args) { AbstractClass A = new ConcreteClassA(); A.TemplateMethod(); AbstractClass B = new

设计模式那点事读书笔记(2)----抽象工厂模式

抽象工厂模式: 此模式提供了一个接口,用于创建相关或者依赖对象的家族,而不需要指定具体实现类. 解决什么问题: 抽象工厂模式允许客户在使用抽象接口来创建一组相关的产品,客户类和工厂类分开,客户需要任何产品的时候,只需要向工厂请求即可,客户无须修改就可以获得新产品.从而实现客户从具体的产品中解耦. UML: 代码结构: 代码: 定义抽象产品: package com.demo.factory.model; /** * 抽象产品 */ public abstract class AbstractBa

设计模式那点事读书笔记(4)----原型模式

建造者模式: 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 解决什么问题: 某些结构复杂的对象”的创建工作,由于需求的变化,这些对象经常面临着剧烈的变化,但是他们却拥有比较稳定一致的接口. UML: 代码结构: 被拷贝的对象: package com.prototype.pojo; /** * 被拷贝的对象 */ public class DayLife implements Cloneable { private String getUp; private String b

设计模式那点事读书笔记(3)----建造者模式

建造者模式: 建造者模式是将复杂的对象构造进行分离,使得每个部件完成比较独立的工作.通过抽象类,接口来约束建造的过程. 解决什么问题: 当生成的产品对象内部具有复杂的结构. 当复杂对象需要与表示分离,可能需要创建不同的表示时. 当需要向客户隐藏产品内部结构表现时. UML: 代码结构: 商品的实体: package com.demo.builder.model; /** * 产品实体 */ public class MobilePackage { private float money; pri