常用设计模式(单例,代理,工厂,观察者)

单例:线程池、任务管理器。

1.饿汉模式:类加载时就创建好单例对象,调用静态方法返回单例对象,不需要考虑多线程问题。

class Singleton{

  private static singleInstance = new Singleton();

  private Singleton(){}

  public static Singleton getInstance(){

    return singleInstance;

  }

}

2.懒汉模式:在调用方法时再创建单例对象

class Singleton{

  private static volatile Singleton singleInstance = null;

  private Singleton(){}

  public static synchronized getInstance(){

    if(singleInstance==null){

    singleInstance = new Singleton();

  }

  return singleInstance;

  }

}

简单工厂模式:

public class LenovoComputer extends Computer{
    @Override
    public void start() {
        System.out.println("联想电脑启动");
    }
public class AsusComputer extends Computer {
    @Override
    public void start() {
        System.out.println("华硕电脑启动");
    }
}
public class HpComputer extends Computer{
    @Override
    public void start() {
        System.out.println("惠普电脑启动");
    }
}
public class ComputerFactory {
    public static Computer createComputer(String type){
        Computer mComputer=null;
        switch (type) {
            case "lenovo":
                mComputer=new LenovoComputer();
               break;
            case "hp":
                mComputer=new HpComputer();
                break;
            case "asus":
                mComputer=new AsusComputer();
                break;

        }
        return mComputer;
    }
}
public class CreatComputer {
    public static void main(String[]args){
      ComputerFactory.createComputer("hp").start();
    }
}将我们要生产的产品共同继承或者实现一个特定的接口,然后调用工厂的静态方法并且传递参数,就会根据参数调用接口的不同的实例对象。

策略模式:  将完成一件事情的不同方法封装为类,然后根据实际情况选择不同的处理方法。http://c.biancheng.net/view/1378.html详情见这篇文章。构成:  抽象策略:具体策略的公共接口,策略的公共代码写在这里,上下文环境类持有该接口引用,使用该引用调用不同的策略。  具体策略:完成一件事情的方法,继承抽象策略接口,实现策略方法。  上下文环境类:持有策略引用,客户端调用该类对象。

简单工厂和策略很像,不同在于,  通过向工厂传递参数,工厂返回对象。  策略是,传递对象,然后就可以产生相应的行为。策略模式的扩展:在一个使用策略模式的系统中,当存在的策略很多时,客户端管理所有策略算法将变得很复杂,如果在环境类中使用策略工厂模式来管理这些策略类将大大减少客户端的工作复杂度。原理是,在上下文对象中持有一个map容器,key是不同策略的字符串,value是单例对象。根据客户端传进来的字符串,选择不同的实例对象。

观察者模式http://c.biancheng.net/view/1390.html又叫订阅/发布模式构成:抽象观察者(接口)具体观察者抽象目标(注意是抽象类!)(相当于中介,真正的事件发生时,通知中介,中介再调用notify方法通知各个观察者)
具体目标

抽象目标之所以是抽象类,是因为里边要有具体的方法。
该模式最重要的也是抽象目标里的方法,图中这几个方法都是具体实现的,而在具体目标中,

代理模式:优点:可以在不修改方法的基础上对方法进行增强。静态代理:代理类和具体类一起实现某个接口,所以代理类和具体类有同名方法,在代理类的同名方法中进行增强后,调用具体类中的方法(代理类中持有一个接口的引用)。

原文地址:https://www.cnblogs.com/gmzqjn/p/11749069.html

时间: 2024-12-29 13:36:35

常用设计模式(单例,代理,工厂,观察者)的相关文章

iOS常用设计模式——单例设计模式

单例设计模式详解 单例设计模式详解 基本概念 在IOS中使用单例模式的情况 非ARC环境创建单例模式的基本步骤 非ARC环境具体代码实现 ARC环境创建单例模式的基本步骤 基本概念 单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例类的特殊类.通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问 在IOS中使用单例模式的情况 1.如果说创建一个对象会耗费很多系统资源,那么此时采用单例模式,因为只需要一个实例,会节省alloc的时间 2.在IOS开发中,如果很多模

面试题复习-常用设计模式-单例设计模式

饿汉式: package com.ajax.pattern.singleton; import lombok.AccessLevel; import lombok.AllArgsConstructor; @AllArgsConstructor(access = AccessLevel.PRIVATE) public class Singleton { private static Singleton singleton = new Singleton(); public static Singl

Javascript 设计模式 单例

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/30490955 一直很喜欢Js,,,今天写一个Js的单例模式实现以及用法. 1.单例模式的写法 单例模式写法相当简单: var singleTon = { m1: "memeber first ", m2: "memeber second ", f1: function () { console.log("fun1 "); } }

Java软件设计模式------单例设计模式

Java软件设计模式一共分为23种; 一般常用的有: 单例设计模式 装饰设计模式 工厂设计模式 单例设计模式(以后的用处:spring框架IOC,默认创建的对象都是单例的): 单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例类的特殊类.通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源.如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案. 单例设计模式分为两种(饿汉式和懒汉式): ①饿汉式(常用): 特

设计模式--单例

单例设计模式用来创建唯一的对象,有些时候我们只需要一个对象,如:线程池,缓存,对话框,注册表,日志对象,等等.这就需要单例设计模式来完成.不用多说,直接上代码.public class TestSingle { private static TestSingle single = null; private TestSingle(){} public static TestSingle getInstance(){ if(single==null){ single = new TestSingl

单例和工厂模式的创建

#pragma once class Config { private: static Config * con; Config(void); Config(const Config & con);//拷贝构造置为私有 public: float cpu; float memory; float harddisk; ~Config(void); //注意声明有static 静态. static Config * getInstance(); void creatInstance(); //工厂模

java设计模式(1)-------单例,工厂,值对象,装饰模式

      java设计模式(1) 先简单的介绍下设计模式吧:是一种解决问题的一种行之有效的思想:用于解决特定环境下.重复出现的特定问题的解决方案. 那为什么我们需要学习设计模式呢? 1.设计模式都是一些相对优秀的解决方案,很多问题都是典型的.有代表性的问题,学习设计模式,我们就不用自己从头来解决这些问题,相当于在巨人的肩膀上,复用这些方案即可,站的高看到远,就是要站在巨人的肩膀上把他们踩下去,嘿嘿. 2.设计模式已经成为专业人士的常用词汇,不懂不利于交流,能让你变得很牛逼哦. 3.能让你设计的

"围观"设计模式(29)--创建型设计模式总结(单例、工厂、原型、创建者)

设计模式源码下载地址 设计模式源码下载地址 1  单例模式 单例模式,也叫单子模式,是一种常用的软件设计模式.在应用这个模式时,单例对象的类必须保证只有一个实例存在.许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为.比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息.这种方式简化了在复杂环境下的配置管理.----维基百科(WIKIPEDIA) 个人的理解: 单例模式概

java设计模式--单例

GOF23(group of four)---由4个大牛总结的JAVA23种常用的设计模式,归根结底都是为了代码的可扩展性. 设计模式中一种比较重要的思想就是:开闭原则,尽量做到对扩展开放,对修改关闭. 单例模式:开发中最常见也是最简单的一种模式 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例.在计算机系统中,线程池.缓存.日志对象.对话框.打印机.显卡的驱动程序对象常被设计成单例. 1.懒汉式单例 //懒汉式单例类.在第一次调用的时候实例化自己,优点:延时加载,用到时候

Objective-C设计模式——单例Singleton(对象创建)

单例 和其它语言的单例产不多,可以说是最简单的一种设计模式了.但是有几个点需要注意下,单例就是一个类只有一个实例. 所以我们要想办法阻止该类产生别的实例,一般语言中都会将构造函数写为private.但是OC中的函数并没有限定符,所以我们需要用一些小技巧来屏蔽这一点. 应用场景 类只能有一个实例,而且必须从一个为人熟知的访问点对其进行访问,比如工厂方法. 这个唯一的实例只能通过类的子类化进行扩展,而且扩展的对象不会破坏客户端代码. 注意 1.OC中单例的实例变量要定义在.m文件 2.OC中单例需要