Java中的三种工厂模式

/**
 * 设计模式之工厂模式,用户创建对象的,通过工厂模式来降低代码的耦合度
 * @author
 */

//简单工厂模式

public class SimpleFactory{
    
    /**
     * 根据不过的String参数 name返回不同的汽车对象name
     * @param name
     * @return
     */
    public Car getCar(String name){
        
        /*
         * 利用equals()方法的特性:对于任何非空引用值x,x.equals(null)
         * 都应返回false
         * "name"是一个非空的String对象,也就是任何一个非空引用值x
         */
        if(name.equals("BenZ")){
            return new BenZ();
        }else if(name.equals("QQ")){
            return new QQ();
        }else{
            System.out.println("工厂没有这种车型");
            return null;
        }
        
    }
}

public interface Car {
    //汽车接口   用来实现
    String getName();
}

public class BenZ implements Car {
    //实现汽车接口
    @Override
    public String getName(){
        return "BenZ";
    }
}

public class BWM implements Car{    
    //实现汽车接口
    @Override
    public String getName(){
        return "BWM";
    }
}

public class SimpleFactoryTest {
    public static void main(String[] args){
        //简单工厂的测试类
        SimpleFactory simpleFactory = new SimpleFactory();
        Car car = simpleFactory.getCar("BenZ");
        System.out.println(car.getName());    //BenZ
                
    }
}

//工厂方法

工厂方法使用一个抽象工厂角色作为核心来代替在简单工厂模式中使用具体类作为核心。虽然使用工厂方法模式足以应付我们可能遇到的大部分业务需求。但是当产品种类非常多时,就会出现大量的与之对应的工厂类,这不应该是我们所希望的。

最好就是使用简单工厂模式与工厂方法模式相结合的方式来减少工厂类:即对于产品树上类似的种类(一般是树的叶子中互为兄弟的)使用简单工厂模式来实现。

在某些时候对于系统中存在不同的产品树,而且产品树上存在产品族,那么这种情况下就可能可以使用抽象工厂模式了。

//定义一个工厂类的接口 接口就是生产汽车 其他负责调用
public interface Factory{
    Car getCar();
}

public interface Car {
    //汽车接口   用来实现
    String getName();
}

public class BWMFactory implements Factory{    
    //实现汽车接口
    @Override
    public Car getCar(){
        return new BWM();
    }
}

public  class BenZFactory implements Factory {
    //实现工厂接口
    @Override
    public Car getCar(){
        return new BenZ();
    }
}

public  class BenZ implements Car{
  //实现汽车接口
    public String getName() {
        return "BenZ";
    }
}

public  class BWM implements Car{
    //实现汽车接口
    public String getName() {
        return "BWM";
    }
}

public class FactoryTest {
    public static void main(String[] args){
        //工厂的测试类
        Factory bwmFactory = new BWMFactory();
        System.out.println(bwmFactory.getCar().getName());   //BWM
        Factory benzFactory = new BenZFactory();
        System.out.println(benzFactory.getCar().getName());     //BenZ                
    }
}

//抽象工厂

//定义一个抽象工厂类的接口
public abstract class AbstractFactory{
    protected abstract Car getCar();    
    //动态配置
    public Car getCar(String name){
        if("BWM".equals(name)){
            return new BWMFactory().getCar();
        }else if("BenZ".equals(name)){
            return new BenZFactory().getCar();
        }else{
            System.out.println("工厂生产不了这种车型");
            return null;
        }
    }    
}

public interface Car {
    //汽车接口   用来实现
    String getName();
}

public  class BWM implements Car{
    //实现汽车接口
    public String getName() {
        return "BWM";
    }
}

public  class BenZ implements Car{

public String getName() {
        return "BenZ";
    }
}

public class BWMFactory extends AbstractFactory{    
    //实现汽车接口
    @Override
    public Car getCar(){
        return new BWM();
    }
}

public  class BenZFactory extends AbstractFactory {
    //实现工厂接口
    @Override
    public Car getCar(){
        return new BenZ();
    }
}

public class DefaultFactory extends AbstractFactory {
    private AudiFactory defaultFactory = new AudiFactory();    
    public Car getCar(){
        return defaultFactory.getCar();
    }
}

public class AbstractFactoryTest {
    public static void main(String[] args){
        //工厂的测试类
        DefaultFactory factory = new DefaultFactory();
        System.out.println(factory.getCar("BWM").getName());   //BWM
    }
}

原文地址:https://www.cnblogs.com/zwjcom/p/11141097.html

时间: 2024-07-31 11:08:44

Java中的三种工厂模式的相关文章

详解 Java 中的三种代理模式

代理模式 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能.      这里使用到编程中的一个思想:不要随意去修改别人已经写好的代码或者方法,如果需改修改,可以通过代理的方式来扩展该方法.      举个例子来说明代理的作用:假设我们想邀请一位明星,那么并不是直接连接明星,而是联系明星的经纪人,来达到同样的目的.明星就是一个目标对象,他只要负责活动中的节目,而其他琐碎

详解 Java 中的三种代理模式!

作者:岑宇 https://www.cnblogs.com/cenyu/p/6289209.html 代理模式 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能. 这里使用到编程中的一个思想:不要随意去修改别人已经写好的代码或者方法,如果需改修改,可以通过代理的方式来扩展该方法. 举个例子来说明代理的作用:假设我们想邀请一位明星,那么并不是直接连接明星,而是联系明星的

设计模式看书笔记(5) - 三种工厂模式比较

先看三种工厂模式部分主要代码(完整代码在前三篇博客): 简单工厂模式: public class SampleFactory { public static Animal createAnimal(String animalName){ if("Tiger".equals(animalName))){ return new Triger(); }else if("Dolphin".equals(animalName)){ return new Dolphin();

设计模式:三种工厂模式

三种工厂模式 简单工厂实现 简单工厂模式(严格来说这不算一种Gof的设计模式,更像是一种编程习惯)属于类的创建型模式,又叫做静态工厂方法模式.通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有相同的父类,应用继承将决定工厂的生产什么产品的决定权直接交到了客户手中,然后客户在输入自己的需求,得到最终的结果. 运用简单工厂模式实现生产pizza的业务场景. /// <summary> /// pizza创建工厂 /// </summary> public class Pi

java 三种工厂模式

一.简单工厂模式 一个栗子: 我喜欢吃面条,抽象一个面条基类,(接口也可以),这是产品的抽象类. public abstract class INoodles { /** * 描述每种面条啥样的 */ public abstract void desc(); } 先来一份兰州拉面(具体的产品类): public class LzNoodles extends INoodles { @Override public void desc() { System.out.println("兰州拉面 上海

高级特性 三种工厂模式

简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例.简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现. 是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类. 我们从一个实例展开 现在有一道面试题:使用java实现一个计算机控制台程序,要求输入数的运算,得到结果. 这道题目最原始的写法: publi

java三种工厂模式

适用场合: 7.3 工厂模式的适用场合 创建新对象最简单的办法是使用new关键字和具体类.只有在某些场合下,创建和维护对象工厂所带来的额外复杂性才是物有所值.本节概括了这些场合. 7.3.1 动态实现 如果需要像前面自行车的例子一样,创建一些用不同方式实现同一接口的对象,那么可以使用一个工厂方法或简单工厂对象来简化选择实现的过程.这种选择可以是明确进行的也可以是隐含的.前者如自行车那个例子,顾客可以选择需要的自行车型号:而下一节所讲的XHR工厂那个例子则属于后者,该例中所返回的连接对象的类型取决

深入理解Java的三种工厂模式

一.简单工厂模式 简单工厂的定义:提供一个创建对象实例的功能,而无须关心其具体实现.被创建实例的类型可以是接口.抽象类,也可以是具体的类 实现汽车接口 1 public interface Car { 2 String getName(); 3 } 奔驰类 1 public class Benz implements Car { 2 @Override 3 public String getName() { 4 return "Benz"; 5 } 6 } 宝马类 1 public c

设计模式—三种工厂模式(JAVA)

一:简单工厂: 有一个实际工厂,这个工厂只能造一类的产品,这一类产品就是一个产品接口,会有多个具体产品实现这个接口,例 如,一个手机厂,生产苹果手机,三星手机: 缺点:在工厂类中集中了所有实例的创建逻辑,违反了高内聚责任分配原则,将全部创建逻辑集中到了一个工厂类中:对系统的维护和扩展不利: 使用场景:负责创建的对象比较少:客户只知道传入工厂类的参数,对于如何创建对象的逻辑不关心:容易违反高内聚责任分配原则,所以只在很简单的情况下应用: package com.designPattern.simp