跳转到帖子

游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

TheHackerWorld官方

精选回复

发布于

单例模式和工厂模式


一、单例模式

这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。 意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。 主要解决:一个全局使用的类频繁地创建与销毁。 举例:操作一个文件,应该用一个唯一的实例去操作。

1.懒汉式

当使用的时候再实例化,节省空间。 加上synchronized锁保证线程安全。

public class Singleton {
          
     
    private static Singleton instance;  
    private Singleton (){
          
   }  
    public static synchronized Singleton getInstance() {
          
     
    if (instance == null) {
          
     
        instance = new Singleton();  
    }  
    return instance;  
    }  
}

2.饿汉式

当加载类的时候就实例化,浪费空间。 不用加synchronized锁,效率更高。

public class Singleton {
          
     
    private static Singleton instance = new Singleton();  
    private Singleton (){
          
   }  
    public static Singleton getInstance() {
          
     
    return instance;  
    }  
}

二、工厂模式

工厂类模式设计的核心是:让“生产”和“产品”解耦。

1.简单工厂模式

工厂模式的主要解决的问题是,将原来分布在各个地方的对象创建过程单独抽离出来,交给工厂类负责创建。其他地方想要使用对象直接找工厂(即调用工厂的方法)获取对象。 优点: 1、一个调用者想创建一个对象,只要知道其名称就可以了。 2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。 3、屏蔽产品的具体实现,调用者只关心产品的接口。

public class TeaFactory {
          
   

    public ITea createTea(String type){
          
   
        ITea tea = null;
        if(type.equals("longjing")){
          
   
            tea = new LongjingTea();
        }else if(type.equals("biluochun")){
          
   
            tea = new BiluochunTea();
        }
        if(tea != null){
          
   
            tea.makeTea();
        }
        return tea;
    }
}


class Solution{
          
   
	public static void main(String[] args) {
          
   
        TeaFactory teaFactory = new TeaFactory();
        ITea tea = teaFactory.createTea("longjing");
    }
}

2.工厂方法模式

如果要创建的产品类型较多,且各个产品创建的过程不尽相同,则一个工厂类职责会变得越来越多,不符合单一职责原则。另外简单工厂也不符合开闭原则。要新增一种产品需要修改原来的工厂类。

工厂方法模式,创建一个工厂接口和创建多个工厂实现类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。

public interface ITeaFactory {
          
   

    // 生产茶叶
    public ITea createTea();
}
public class LongjingTeaFactory implements ITeaFactory{
          
   
    @Override
    public ITea createTea() {
          
   
        return new LongjingTea();
    }
}

public class BiluochunTeaFactory implements ITeaFactory{
          
   
    @Override
    public ITea createTea() {
          
   
        return new BiluochunTea();
    }
}
public class FactoryMethodTest {
          
   
    public static void main(String[] args) {
          
   
        ITeaFactory factory = new LongjingTeaFactory();
        factory.createTea();

        factory = new BiluochunTeaFactory();
        factory.createTea();
    }
}

3.抽象工厂模式

总结

1.简单工厂模式:一个工厂里可以生产所有产品,根据传入的参数选择生产哪种产品。 2.工厂模式:有多个工厂,每个工厂只生产一种产品。 3.抽象工厂模式:有多个工厂,每个工厂都能生产多个产品,它们是一个品牌。

创建帐户或登录后发表意见

最近浏览 0

  • 没有会员查看此页面。