日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

设计模式——创建型模型

發(fā)布時(shí)間:2023/12/4 asp.net 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式——创建型模型 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

  • 單例模式(singleton)
  • 構(gòu)建模式(Builder)
  • 原型模式(Prototype)
  • 工廠方法模式(Factory)
  • 抽象工廠模式(Abstract Factory)
  • **

    一、5種創(chuàng)建型模型

    **

    1.1 單例模式(singleton)

    簡(jiǎn)介:
    單例模式特別簡(jiǎn)單,目的是為類創(chuàng)建唯一的對(duì)象。
    下面是單例模式的一種實(shí)現(xiàn)方式(單例模式的5種實(shí)現(xiàn)方式見(jiàn),傳送門):

    public class Singleton { private volatile static Singleton singleton = null; //volatile關(guān)鍵字private Singleton(){} //私有化構(gòu)造函數(shù),使其不可繼承public static Singleton getInstance() {if(singleton == null) {synchronized (Singleton.class) {if(singleton == null) {//double check,保證效率、安全性singleton = new Singleton();}}}return singleton;} }

    1.2 構(gòu)建模式(Builder)

    簡(jiǎn)介:
    將一個(gè)復(fù)雜對(duì)象的構(gòu)建和表現(xiàn)分離,使得不同的構(gòu)建過(guò)程可以創(chuàng)建不同的表示
    類圖:

    代碼如下:

    public class Product {/*** 定義一些關(guān)于產(chǎn)品的操作*/private String part1;private String part2;public String getPart1() {return part1;}public void setPart1(String part1) {this.part1 = part1;}public String getPart2() {return part2;}public void setPart2(String part2) {this.part2 = part2;}} public interface Builder {public void buildPart1();public void buildPart2();public Product retrieveResult();} public class ConcreteBuilder implements Builder {private Product product = new Product();/*** 產(chǎn)品零件建造方法1*/@Overridepublic void buildPart1() {//構(gòu)建產(chǎn)品的第一個(gè)零件product.setPart1("編號(hào):9527");}/*** 產(chǎn)品零件建造方法2*/@Overridepublic void buildPart2() {//構(gòu)建產(chǎn)品的第二個(gè)零件product.setPart2("名稱:XXX");}/*** 產(chǎn)品返還方法*/@Overridepublic Product retrieveResult() {return product;} } public class Director {/*** 持有當(dāng)前需要使用的建造器對(duì)象*/private Builder builder;/*** 構(gòu)造方法,傳入建造器對(duì)象* @param builder 建造器對(duì)象*/public Director(Builder builder){this.builder = builder;}/*** 產(chǎn)品構(gòu)造方法,負(fù)責(zé)調(diào)用各個(gè)零件建造方法*/public void construct(){builder.buildPart1();builder.buildPart2();} } public class Client {public static void main(String[]args){Builder builder = new ConcreteBuilder();Director director = new Director(builder);director.construct();Product product = builder.retrieveResult();System.out.println(product.getPart1());System.out.println(product.getPart2());}}

    1.3 原型模式(Prototype)

    簡(jiǎn)介:
    原型模式要求對(duì)象實(shí)現(xiàn)一個(gè)可以“克隆”自身的接口,這樣就可以通過(guò)復(fù)制一個(gè)對(duì)象實(shí)例來(lái)創(chuàng)建新的實(shí)例。通過(guò)原型來(lái)創(chuàng)建對(duì)象,就不需要關(guān)心實(shí)例本身的類型,只要實(shí)現(xiàn)了克隆自身的方法,就可以通過(guò)這 個(gè)方法獲取新的對(duì)象,而無(wú)需new
    原型模式有兩種表現(xiàn)形式:1)簡(jiǎn)單形式 2)登記形式

    類圖:


    代碼如下:

    public interface Prototype{public Prototype clone();public String getName();public void setName(String name); } public class ConcretePrototype1 implements Prototype {private String name;public Prototype clone(){ConcretePrototype1 prototype = new ConcretePrototype1();prototype.setName(this.name);return prototype;}public String toString(){return "Now in Prototype1 , name = " + this.name;}@Overridepublic String getName() {return name;}@Overridepublic void setName(String name) {this.name = name;} } public class ConcretePrototype2 implements Prototype {private String name;public Prototype clone(){ConcretePrototype2 prototype = new ConcretePrototype2();prototype.setName(this.name);return prototype;}public String toString(){return "Now in Prototype2 , name = " + this.name;}@Overridepublic String getName() {return name;}@Overridepublic void setName(String name) {this.name = name;} } public class PrototypeManager {/*** 用來(lái)記錄原型的編號(hào)和原型實(shí)例的對(duì)應(yīng)關(guān)系*/private static Map<String,Prototype> map = new HashMap<String,Prototype>();/*** 私有化構(gòu)造方法,避免外部創(chuàng)建實(shí)例*/private PrototypeManager(){}/*** 向原型管理器里面添加或是修改某個(gè)原型注冊(cè)* @param prototypeId 原型編號(hào)* @param prototype 原型實(shí)例*/public synchronized static void setPrototype(String prototypeId , Prototype prototype){map.put(prototypeId, prototype);}/*** 從原型管理器里面刪除某個(gè)原型注冊(cè)* @param prototypeId 原型編號(hào)*/public synchronized static void removePrototype(String prototypeId){map.remove(prototypeId);}/*** 獲取某個(gè)原型編號(hào)對(duì)應(yīng)的原型實(shí)例* @param prototypeId 原型編號(hào)* @return 原型編號(hào)對(duì)應(yīng)的原型實(shí)例* @throws Exception 如果原型編號(hào)對(duì)應(yīng)的實(shí)例不存在,則拋出異常*/public synchronized static Prototype getPrototype(String prototypeId) throws Exception{Prototype prototype = map.get(prototypeId);if(prototype == null){throw new Exception("您希望獲取的原型還沒(méi)有注冊(cè)或已被銷毀");}return prototype;} } public class Client {public static void main(String[]args){try{Prototype p1 = new ConcretePrototype1();PrototypeManager.setPrototype("p1", p1);//獲取原型來(lái)創(chuàng)建對(duì)象Prototype p3 = PrototypeManager.getPrototype("p1").clone();p3.setName("張三");System.out.println("第一個(gè)實(shí)例:" + p3);//有人動(dòng)態(tài)的切換了實(shí)現(xiàn)Prototype p2 = new ConcretePrototype2();PrototypeManager.setPrototype("p1", p2);//重新獲取原型來(lái)創(chuàng)建對(duì)象Prototype p4 = PrototypeManager.getPrototype("p1").clone();p4.setName("李四");System.out.println("第二個(gè)實(shí)例:" + p4);//有人注銷了這個(gè)原型PrototypeManager.removePrototype("p1");//再次獲取原型來(lái)創(chuàng)建對(duì)象Prototype p5 = PrototypeManager.getPrototype("p1").clone();p5.setName("王五");System.out.println("第三個(gè)實(shí)例:" + p5);}catch(Exception e){e.printStackTrace();}} }

    1.4 工廠方法模式(Factory)

    簡(jiǎn)介:
    工廠方法的用意是定義一個(gè)創(chuàng)建對(duì)象的工廠接口,將實(shí)際創(chuàng)建工作推遲到子類中。

    類圖:(工廠與抽象工廠)

    代碼如下:

    interface Product {}class ProductA implements Product {}class ProductB implements Product {}abstract class Factory {public abstract Product makeProduct();}class FactoryA extends Factory {@Overridepublic Product makeProduct() {return new ProductA();}}class FactoryB extends Factory {@Overridepublic Product makeProduct() {return new ProductB();}}public class Client {public static void main(String[] args) {Factory factory = new FactoryA();Product product = factory.makeProduct();//對(duì)象為:com.obob.test.ProductA@15db9742System.out.println(product);}}

    總結(jié)

    以上是生活随笔為你收集整理的设计模式——创建型模型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。