java工厂模式的学习笔记

简单工厂模式(实例)

专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类,简单工厂(Simple Factory)模式又称为静态工厂方法(Static Factory Method)模式,属于类的创建型模式,但其不属于23种GOF设计模式之一,通常它根据自变量的不同返回不同的类的实例。

UML

简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建出哪一个产品类的实例。由上图可以看出,简单工厂模式有工厂、抽象产品、具体产品三个角色。

工厂角色(Factory)
是简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。可被外界直接调用来创建产品对象
抽象产品角色(Product)
是简单工厂模式所创建的所有产品对象的父类,它负责描述所有实例所共有的公共接口
具体产品角色(ConcreteProductA及ConcreteProductB)
是简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例
 

现实生活中大家都习惯刷卡买单,卡的种类很多,VISA、MASTERCARD等等…下面我们写代码模拟刷卡处理

package com.yq1012.创建型模式.工厂方法.简单工厂;
 
import java.io.Console;
 abstract class BankCardHandle
    {
        public abstract void HandleProcess();
    }
 
 
 
package com.yq1012.创建型模式.工厂方法.简单工厂;
 
import java.io.Console;
 abstract class BankCardHandle
    {
        public abstract void HandleProcess();
    }
 
 
 
 
package com.yq1012.创建型模式.工厂方法.简单工厂;
 class MasterCardHandle extends BankCardHandle
 {
 
 @Override
 public void HandleProcess() {
  System.out.println("MASTERCARD卡处理中"); 
 }
 
 }
 
 
package com.yq1012.创建型模式.工厂方法.简单工厂;
 class VisaHandle extends BankCardHandle
 {
 
 
 @Override
 public void HandleProcess() {
 
      System.out.println("VISA卡处理中");
  
 }
 
 }
 
 
 
package com.yq1012.创建型模式.工厂方法.简单工厂;
 
public class Test {
 
 public static void main(String[] args) {
  
  HandleFactory factory= new HandleFactory();
  BankCardHandle bankCardHandle= factory.CreateBankCardHandle("VISA");
  bankCardHandle.HandleProcess();
 }
//静态工厂模式:顾名思义就知道他是用静态方法实现的,其创建的对象具有一定的特性,譬如说是某类的派生或者某接口的实现。其比较简单。
// 专门定义一个类来负责创建其他类的实例
// ,被创建的实例通常都具有共同的父类
// ,简单工厂(Simple Factory)模式又称为静态工厂方法(Static Factory Method)模式,
// 属于类的创建型模式,但其不属于23种GOF设计模式之一,通常它根据自变量的不同返回不同的类的实例。
// 优势劣势:
//   在简单工厂模式中,工厂类是整个模式的关键,其包含必要的判断逻辑,能够根据外界给定的信息,决定究竟创建哪个类的实例,
// 外界可以不用去关注对象的创建,仅需要负责“消费”对象就可以了,明确区分了责任,有利于结构的优化。
//
// 不过,简单工厂模式的缺点也提现在其工厂类上,该类集中了所有实例的创建逻辑,违反了高内聚的责任分配原则,
// 当系统的具体产品类不断增多时,工厂类中条件判断过多,不利于扩展及维护,简单工厂模式的这些缺点,利用工厂方法模式可以得到一定的克服。
}

工厂模式(实例)

package com.yq1012.创建型模式.工厂方法.工厂模式;
/**
 * 动物类
 * @author Lyon Yao
 *
 */ 
public abstract class Animal { 
     
    private String name; 
     
    public Animal() { 
        super(); 
        // TODO Auto-generated constructor stub 
    } 
    public Animal(String name) { 
        super(); 
        this.name = name; 
    } 
    public abstract void eat(); 
    public String getName() { 
        return name; 
    } 
    public void setName(String name) { 
        this.name = name; 
    } 
     

 

package com.yq1012.创建型模式.工厂方法.工厂模式;
/**
 * 母亲接口
 * @author Lyon
 *
 */ 
public interface AnimalMother { 
    /**
     * 生育动物
     * @return
     */ 
    public  Animal giveBirth(); 

 

package com.yq1012.创建型模式.工厂方法.工厂模式;
/**
 * 猫类
 * @author Lyon Yao
 *
 */ 
public class Cat extends Animal { 
 
    public Cat() { 
        // TODO Auto-generated constructor stub 
    } 
 
    public Cat(String name) { 
        super(name); 
        // TODO Auto-generated constructor stub 
    } 
 
    @Override 
    public void eat() { 
        // TODO Auto-generated method stub 
        System.out.println("I like to eat fish!"); 
    } 
 

 

package com.yq1012.创建型模式.工厂方法.工厂模式;
/**
 * 猫母亲 生猫咪
 * @author Lyon Yao
 *
 */ 
public class CatMother implements AnimalMother { 
 
    @Override 
    public Animal giveBirth() { 
        // TODO Auto-generated method stub 
        Animal cat=new Cat(); 
        System.out.println("猫母亲生了一只小猫眯"); 
        return cat; 
    } 
 
}

 

package com.yq1012.创建型模式.工厂方法.工厂模式;
/**
 * 狗类
 * @author Lyon Yao
 *
 */ 
public class Dog extends Animal { 
 
    public Dog() { 
        // TODO Auto-generated constructor stub 
    } 
 
    public Dog(String name) { 
        super(name); 
        // TODO Auto-generated constructor stub 
    } 
 
    @Override 
    public void eat() { 
        // TODO Auto-generated method stub 
        System.out.println("I like to eat bone!"); 
    } 
 

 

package com.yq1012.创建型模式.工厂方法.工厂模式;
/**
 * 狗母亲  生狗
 * @author Lyon Yao
 *
 */ 
public class DogMother implements AnimalMother { 
 
    @Override 
    public Animal giveBirth() { 
        // TODO Auto-generated method stub 
        Animal dog=new Dog(); 
        System.out.println("狗母亲生了一只小狗"); 
        return dog; 
    } 
 

 

package com.yq1012.创建型模式.工厂方法.工厂模式;

public class Test {

 public static void main(String[] args) {
  
//  工厂方法模式:其主要是对各个类型的东西分类生产,但分类生产的对象仍然是具有某一特性的
//  譬如说:前面的静态工厂类是一个综合造车工厂,不管是汽车还是火车都能生产,
//  而工厂方法模式就是工厂具体分工,造汽车的工厂只造汽车,造火车的只造火车,不管造汽车还是火车但造出来的还是车。
//  具体代码例子如下:(这里的例子和上面的例子是一起的,具狗生好多小狗,猫生好多小猫的例子,如果不具体那么是母动物都能生的)
        AnimalMother mother=new CatMother(); 
         mother.giveBirth(); 
         mother=new DogMother(); 
         mother.giveBirth(); 
  
 }
}

时间: 2024-09-29 17:28:59

java工厂模式的学习笔记的相关文章

PHP中简单工厂模式的学习笔记

简单工厂模式: ①抽象基类:类中定义抽象一些方法,用以在子类中实现 ②继承自抽象基类的子类:实现基类中的抽象方法 ③工厂类:用以实例化对象 使用工厂模式的目的或目标? 工厂模式的最大优点在于创建对象上面,就是把创建对象的过程封装起来,这样随时可以产生一个新的对象. 减少代码进行复制粘帖,耦合关系重,牵一发动其他部分代码. 通俗的说,以前创建一个对象要使用new,现在把这个过程封装起来了. 假设不使用工厂模式:那么很多地方调用类a,代码就会这样子创建一个实例:new a(),假设某天需要把a类的名

轻松掌握Java工厂模式、抽象工厂模式_java

在面向对象编程的程序设计中,我们最常见的操作就是new对象,但在创建一个新对象的过程中,会有一些问题,比如我们需要注意创建新对象的实现细节,初始化一些必要的参数等.这样会让我们在讲更多的心思放在对象的创建上,而不是程序逻辑的实现上,严重拖延了我们的程序开发效率.工厂模式和抽象工厂模式的出现则完美解决了这个问题,让我们不再关心对象的创建,更多的在重心放在业务的实现上. 特点:     1.程序员直接通过工厂方法创建对象,不再关注创建对象的细节.     2.隐藏对象的实现细节,也有利于程序的安全性

java-求:Java工厂模式的应用!!!!

问题描述 求:Java工厂模式的应用!!!! Java中的工厂模式怎么用啊????什么情况下用啊????谁可以举个例子吗? 解决方案 java反射机制工厂模式的应用Java工厂模式应用 解决方案二: 我觉得是这样,由于在面向接口编程的时候,如果你的不同的子类比较多.那么在实现上,你可以考虑使用工厂模式. 跟据你传递进去的不同参数,得到不同的子类实例.这样编写的代码结构清晰. 举例: public class Factory{ public static ISample creator(int w

怎么简单java工厂模式?谁知道

问题描述 怎么简单java工厂模式?谁知道 怎么建一个简单工厂模式??????怎么建一个简单工厂模式??????怎么建一个简单工厂模式??????怎么建一个简单工厂模式??????怎么建一个简单工厂模式??????怎么建一个简单工厂模式?????? 解决方案 class User { .... } class UserSimpleFactory { public static User GetUser() { return new User(); } } 解决方案二: Java简单工厂模式Jav

Java的“对象思想”学习笔记[二]

笔记|对象 在这篇文章里我将介绍一些Java对于对象的基本处理模式的问题. 首先看一个有关对象相等性(Object equivalence)的例子: 先看下面的代码: public class EqualTest1{ public static void main(String[] args){ Integer n1 = new Integer(20); Integer n2 = new Integer(20); System.out.println(n1 = = n2); System.out

java 工厂模式

工厂模式细分有三种,分别为:简单工厂模式.工厂方法模式.抽象工厂模式 现单个的讲,最后再讲这三个的区别这篇文章主要通过一个农场的实例来讲解,这也是java与模式书中的例子,只不过我对一些部分进行了简化,一些部分进行了扩充,以帮助理解例子如下:有一个农场公司,专门向市场销售各类水果有如下水果:葡萄(grape)草莓(strawberry)苹果(apple) 简单工厂模式: 这个比较简单,写一下源代码源代码中给出了必须的注释代码比书上的要简单一些,排版也好看一些,只是为了让新手更好的理解 Fruit

在什么情况下使用java工厂模式?

问题描述 请问一下在什么情况下使用工厂模式? 解决方案 解决方案二:就我个人的情况来讲,很少使用,主要是DOM的机制利用了工厂模式解决方案三:当你要产出某些对象的时候,这些对象有一定的相似性,可以用一个工厂类的工厂方法来生产这些对象.解决方案四:返回两个类a,b他们有相似的特点或者特性,所以抽象出一个父类或者接口,a,b继承或者实现它.好比苹果a和橘子b都继承了水果的接口在实际应用中,我们写一个方法想返回一个水果类型,调用它的类无需知道这个方法返回的具体是什么,只需知道返回的是个水果就好,水果涵

《java与模式》读书笔记 ----模式设计的原则

笔记|设计 里氏代换原则----LSP 概念:一个软件实体如果使用一个父类的话,那么一定适用于其之类,而且不能觉察出父类和子类的区别. 里氏代换原则是继承复用的基石.只有当衍生类可以替换掉基类,软件单位不会受到影响时,基础类才真正被复用,而衍生类才能在基础类上增加新的行为. JAVA中的上塑造型既是里氏代换原则的体现. 依赖倒转原则-----DIP   狭义依赖关系. 依赖关系(Dependency)类与类之间的一种连接,依赖总是单向的.一各类依赖于另一各类的定义.一个人(Person)可以买车

[Java]Socket和ServerSocket学习笔记

对于即时类应用或者即时类的游戏,HTTP协议很多时候无法满足于我们的需求.这会,Socket对于我们来说就非常实用了.下面是本次学习的笔记.主要分异常类型.交互原理.Socket.ServerSocket.多线程这几个方面阐述.   异常类型 在了解Socket的内容之前,先要了解一下涉及到的一些异常类型.以下四种类型都是继承于IOException,所以很多之后直接弹出IOException即可. UnkownHostException:    主机名字或IP错误 ConnectExcepti