国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

設計模式-抽象工廠方法

2019-11-14 12:11:45
字體:
來源:轉載
供稿:網友

除了洗衣服,這次加上看電視的功能了

1.洗衣服有IWash接口和兩個實現類

2.看電視也有ITv接口和兩個實現類

3.工廠方面首先是一個工廠接口,然后定義一個實現類,通過讀取xml文件反射生成類,這樣以后洗衣服和看電視具體實現改變時無須修改工廠類,只需要修改xml文件

java代碼如下

beans.xml

<?xml version="1.0" encoding="UTF-8"?>	<beans>		<bean id="滾筒洗衣機" class="com.liu.pattern3.GTWasher"></bean>		<bean id="波輪洗衣機" class="com.liu.pattern3.BLWasher"></bean>		<bean id="國產電視" class="com.liu.pattern3.GCTv"></bean>		<bean id="進口電視" class="com.liu.pattern3.JKTv"></bean>	</beans>

IFactory

package com.liu.pattern3;//抽象工廠public interface IFactory {	public IWasher createWasher(String name);	public ITv createTv(String name);}

MyFactory

package com.liu.pattern3;public class MyFactory implements IFactory {	PRivate ClassPathXmlLoader loader = new ClassPathXmlLoader();		@Override	public IWasher createWasher(String name) {		return (IWasher)loader.getBean(name);	}	@Override	public ITv createTv(String name) {		return (ITv)loader.getBean(name);	}}

ClassPathXmlLoader

package com.liu.pattern3;import java.io.IOException;import java.util.HashMap;import java.util.List;import org.jdom2.Document;import org.jdom2.Element;import org.jdom2.JDOMException;import org.jdom2.input.SAXBuilder;public class ClassPathXmlLoader {	private HashMap<String,Object> beans;		public Object getBean(String name){		return beans.get(name);	}		public ClassPathXmlLoader(){		//Load xml File		SAXBuilder builder = new SAXBuilder();		beans = new HashMap<String, Object>();		try {			Document doc = builder.build(this.getClass().getClassLoader().getResourceAsStream("beans.xml"));			Element root = doc.getRootElement();			List<Element> list = root.getChildren("bean");			for(int i=0;i<list.size();i++){				Element bean = list.get(i);				String id = bean.getAttributeValue("id");				String name = bean.getAttributeValue("class");				Object o = Class.forName(name).newInstance();				beans.put(id,o);			}		} catch (Exception e) {			e.printStackTrace();		}	}}

IWasher

package com.liu.pattern3;public interface IWasher {	public void wash();}

BLWasher

package com.liu.pattern3;public class BLWasher implements IWasher {	@Override	public void wash() {		System.out.println("波輪洗衣機洗衣服了");	}}

GTWasher

package com.liu.pattern3;public class GTWasher implements IWasher {	@Override	public void wash() {		System.out.println("滾筒洗衣機洗衣服了");	}}

ITv

package com.liu.pattern3;public interface ITv {	public void see();}

JKTv

package com.liu.pattern3;public class JKTv implements ITv {	@Override	public void see() {		System.out.println("看進口電視");	}}

GCTv

package com.liu.pattern3;public class GCTv implements ITv {	@Override	public void see() {				System.out.println("看國產電視");	}}

Test

package com.liu.pattern3;public class Test {	public static void main(String[] args) {		IFactory factory = new MyFactory();		IWasher washer = factory.createWasher("波輪洗衣機");		washer.wash();		ITv tv = factory.createTv("國產電視");		tv.see();	}}

 

C#實現代碼

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Xml;using System.Collections;using System.Reflection;namespace com.liu.pattern3{    public class ClassPathXmlLoader {        private Hashtable beans;        public ClassPathXmlLoader(){            beans = new Hashtable();            XmlDocument xmlDoc = new XmlDocument();            xmlDoc.Load("beans.xml");            XmlNode root = xmlDoc.SelectSingleNode("beans");            XmlNodeList list = root.SelectNodes("bean");            for (int i = 0; i < list.Count; i++) {                XmlNode node = list.Item(i);                String id = node.Attributes["id"].Value;                String name = node.Attributes["class"].Value;                Object o = Assembly.Load("AbstractFactory").CreateInstance(name);                beans.Add(id, o);            }        }        public Object GetBean(String name){            return beans[name];        }    }    public interface IWasher    {        void Wash();    }    public class GTWasher : IWasher    {        public void Wash()        {            System.Console.WriteLine("滾筒洗衣機洗衣服了");        }    }    public class BLWasher : IWasher    {        public void Wash()        {            System.Console.WriteLine("波輪洗衣機洗衣服了");        }    }    public interface ITv    {        void See();    }    public class GCTv:ITv {        public void See() {            System.Console.WriteLine("看國產電視");        }    }    public class JKTv:ITv    {        public void See()        {            System.Console.WriteLine("看進口電視");        }    }    public interface IFactory    {        IWasher CreateWasher(String name);        ITv CreateTv(String name);    }    public class MyFactory : IFactory {        private ClassPathXmlLoader loader = new ClassPathXmlLoader();                public IWasher CreateWasher(String name) {            return (IWasher)loader.GetBean(name);        }        public ITv CreateTv(String name)        {            return (ITv)loader.GetBean(name);        }    }    class Test    {        static void Main(string[] args)        {            MyFactory factory = new MyFactory();            IWasher washer = factory.CreateWasher("滾筒洗衣機");            washer.Wash();            ITv tv = factory.CreateTv("進口電視");            tv.See();            System.Console.ReadKey();        }    }}

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 南安市| 青田县| 麦盖提县| 盐城市| 顺昌县| 兰州市| 西林县| 云浮市| 开化县| 息烽县| 亚东县| 平乡县| 北辰区| 积石山| 东至县| 那坡县| 遂溪县| 洛扎县| 富锦市| 宜良县| 湄潭县| 潜山县| 阳高县| 邵武市| 彭山县| 新巴尔虎左旗| 秦安县| 鄄城县| 贺州市| 四会市| 清镇市| 南开区| 南涧| 固阳县| 开封市| 泰宁县| 钦州市| 萍乡市| 平南县| 台北市| 鹿邑县|