1、在内部产生本类的实例化对象publicgetInstance()通过静态方法返回instance对象returninstance; Singleton()将构造方法封装为私有化voidprint()System.out.println(HelloWorld!);SingletonDemomain(Stringargs)s1null;声明对象s2s3Singleton.getInstance();取得实例化对象s1.print();调用方法 s2.print();s3.print();java view plaincopyprint?调用方法class Singleton private sta
2、tic Singleton instance = new Singleton();/ 在内部产生本类的实例化对象 public static Singleton getInstance() / 通过静态方法返回instance对象 return instance; private Singleton() / 将构造方法封装为私有化 public void print() System.out.println(Hello World!public class SingletonDemo public static void main(String args) Singleton s1 = nul
3、l; / 声明对象 Singleton s2 = null; Singleton s3 = null; s1 = Singleton.getInstance(); / 取得实例化对象 s2 = Singleton.getInstance(); s3 = Singleton.getInstance(); s1.print(); / 调用方法 s2.print(); s3.print();一、单例模式的介绍 Singleton是一种创建型模式,指某个类采用Singleton模式,则在这个类被创建后,只可能产生一个实例供外部访问,并且提供一个全局的访问点 二、单例模式的实现 实现的方式有如下四种:
4、/* *单例模式的实现:饿汉式,线程安全但效率比较低 */SingletonTestSingletonTest()finalSingletonTest();getInstancei()/*但效率比较低/* * * 单例模式的实现:饿汉式,线程安全 但效率比较低 */public class SingletonTest private SingletonTest() private static final SingletonTest instance = new SingletonTest(); public static SingletonTest getInstancei() 饱汉式,非线
5、程安全if(instance=null) null)饱汉式,非线程安全 private static SingletonTest instance; public static SingletonTest getInstance() if (instance = null) instance = new SingletonTest();线程安全,但是效率非常低 authorvanceinfo * synchronized线程安全,但是效率非常低vanceinfo * 线程安全,但是效率非常低 * author vanceinfo * public static synchronized Sin
6、gletonTest getInstance() 线程安全并且效率高 getIstance()(SingletonTest.class)2.工厂设计模式 程序在接口和子类之间加入了一个过渡端,通过此过渡端可以动态取得实现了共同接口的子类实例化对象。interfaceAnimal定义一个动物的接口say();说话方法Catimplements定义子类CatOverridesay()覆写say()方法我是猫咪,喵呜!Dog定义子类Dog我是小狗,汪汪!Factory定义工厂类getInstance(StringclassName)a定义接口对象(Cat.equals(className)判断是哪个
7、子类的标记Cat();通过Cat子类实例化接口DogDog();通过Dog子类实例化接口a;FactoryDemomain(Stringargs)Factory.getInstance(args0);通过工厂获取实例(a判断对象是否为空a.say();interface Animal / 定义一个动物的接口 public void say(); / 说话方法class Cat implements Animal / 定义子类Cat Override public void say() / 覆写say()方法class Dog implements Animal / 定义子类Dogclass F
8、actory / 定义工厂类 public static Animal getInstance(String className) Animal a = null; / 定义接口对象 if (.equals(className) / 判断是哪个子类的标记 a = new Cat(); / 通过Cat子类实例化接口 a = new Dog(); / 通过Dog子类实例化接口 return a;public class FactoryDemo public static void main(String args) a = Factory.getInstance(args0); / 通过工厂获取实例 if (a != null) / 判断对象是否为空 a.say();3.代理设计模式 指由一个代理主题来操作真实主题,真实主题执行具体的业务操作,而代理主题负责其他相关业务的处理。比如生活中的通过代理访问网络,客户通过网络代理连接网络(具体业务),由代理服务器完成用户权限和访问限制等与上网相关的其他操作(相关业务)。Network定义Network接口browse();定义浏览的抽象方法Real真实的上网操作browse()覆写抽象方法上网浏览信息!Proxy代理上网network;Proxy(Networknetwork)/设置代理的真实操作
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1