From 1620f26226009ec745d96f0058855cff6c8161df Mon Sep 17 00:00:00 2001 From: zclhit <273239067@qq.com> Date: Sat, 13 Apr 2019 22:05:05 +0800 Subject: [PATCH 1/2] add home work. --- .gitignore | 3 ++- .../sample01/Client.java | 2 ++ .../sample01/HaierTV.java | 2 ++ .../sample01/HisenseTV.java | 2 ++ Chapter 04 Simple Factory/sample01/TV.java | 2 ++ .../sample01/TVFactory.java | 9 +++++--- .../sample01/XMLUtilTV.java | 4 ++-- .../sample02/Administrator.java | 2 ++ .../sample02/Client.java | 4 +++- .../sample02/Employee.java | 2 ++ .../sample02/Manager.java | 2 ++ Chapter 04 Simple Factory/sample02/User.java | 2 ++ .../sample02/UserDAO.java | 2 ++ .../sample02/UserFactory.java | 2 ++ .../sample01/configTV.xml | 4 ++++ .../sample01/Client.java | 4 +++- .../sample01/HaierTV.java | 2 ++ .../sample01/HaierTVFactory.java | 2 ++ .../sample01/HisenseTV.java | 2 ++ .../sample01/HisenseTVFactory.java | 1 + Chapter 05 Factory Method/sample01/TV.java | 1 + .../sample01/TVFactory.java | 1 + .../sample01/XMLUtil.java | 8 ++++--- Chapter 05 Factory Method/sample01/config.xml | 3 ++- .../sample01/project/GifImageReader.java | 8 +++++++ .../project/GifImageReaderFactory.java | 9 ++++++++ .../sample01/project/ImageReader.java | 5 ++++ .../sample01/project/ImageReaderFactory.java | 5 ++++ .../sample01/project/PngImageReader.java | 8 +++++++ .../project/PngImageReaderFactory.java | 9 ++++++++ .../sample01/project/client/Client.java | 23 +++++++++++++++++++ .../sample01/AirConditioner.java | 1 + .../sample01/Client.java | 1 + .../sample01/EFactory.java | 1 + .../sample01/HaierFactory.java | 1 + .../sample01/HaierTelevision.java | 1 + .../sample01/HairAirConditioner.java | 1 + .../sample01/TCLAirConditioner.java | 1 + .../sample01/TCLFactory.java | 1 + .../sample01/TCLTelevision.java | 1 + .../sample01/Television.java | 1 + .../sample01/XMLUtil.java | 3 ++- .../sample01/config.xml | 2 +- .../sample01/homework/Client/GameClient.java | 19 +++++++++++++++ .../sample01/homework/ControllerFactory.java | 7 ++++++ .../homework/InterfaceController.java | 5 ++++ .../sample01/homework/LinuxFactory.java | 13 +++++++++++ .../homework/LinuxInterfaceController.java | 8 +++++++ .../homework/LinuxOperationController.java | 8 +++++++ .../homework/OperationController.java | 5 ++++ .../sample01/homework/WindowsFactory.java | 13 +++++++++++ .../homework/WindowsInterfaceController.java | 8 +++++++ .../homework/WindowsOperationController.java | 8 +++++++ 53 files changed, 230 insertions(+), 14 deletions(-) create mode 100644 Chapter 04 Simple Factory/sample02/out/production/Chapter 04 Simple Factory/sample01/configTV.xml create mode 100644 Chapter 05 Factory Method/sample01/project/GifImageReader.java create mode 100644 Chapter 05 Factory Method/sample01/project/GifImageReaderFactory.java create mode 100644 Chapter 05 Factory Method/sample01/project/ImageReader.java create mode 100644 Chapter 05 Factory Method/sample01/project/ImageReaderFactory.java create mode 100644 Chapter 05 Factory Method/sample01/project/PngImageReader.java create mode 100644 Chapter 05 Factory Method/sample01/project/PngImageReaderFactory.java create mode 100644 Chapter 05 Factory Method/sample01/project/client/Client.java create mode 100644 Chapter 06 Abstract Factory/sample01/homework/Client/GameClient.java create mode 100644 Chapter 06 Abstract Factory/sample01/homework/ControllerFactory.java create mode 100644 Chapter 06 Abstract Factory/sample01/homework/InterfaceController.java create mode 100644 Chapter 06 Abstract Factory/sample01/homework/LinuxFactory.java create mode 100644 Chapter 06 Abstract Factory/sample01/homework/LinuxInterfaceController.java create mode 100644 Chapter 06 Abstract Factory/sample01/homework/LinuxOperationController.java create mode 100644 Chapter 06 Abstract Factory/sample01/homework/OperationController.java create mode 100644 Chapter 06 Abstract Factory/sample01/homework/WindowsFactory.java create mode 100644 Chapter 06 Abstract Factory/sample01/homework/WindowsInterfaceController.java create mode 100644 Chapter 06 Abstract Factory/sample01/homework/WindowsOperationController.java diff --git a/.gitignore b/.gitignore index 5241a72..e3ed2b0 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -*.class \ No newline at end of file +*.class +.idea \ No newline at end of file diff --git a/Chapter 04 Simple Factory/sample01/Client.java b/Chapter 04 Simple Factory/sample01/Client.java index 7046500..8ef80cb 100644 --- a/Chapter 04 Simple Factory/sample01/Client.java +++ b/Chapter 04 Simple Factory/sample01/Client.java @@ -1,3 +1,5 @@ +package sample01; + public class Client { public static void main(String args[]) diff --git a/Chapter 04 Simple Factory/sample01/HaierTV.java b/Chapter 04 Simple Factory/sample01/HaierTV.java index d020697..0fad59a 100644 --- a/Chapter 04 Simple Factory/sample01/HaierTV.java +++ b/Chapter 04 Simple Factory/sample01/HaierTV.java @@ -1,3 +1,5 @@ +package sample01; + public class HaierTV implements TV { public void play() diff --git a/Chapter 04 Simple Factory/sample01/HisenseTV.java b/Chapter 04 Simple Factory/sample01/HisenseTV.java index 09c6bb1..3219035 100644 --- a/Chapter 04 Simple Factory/sample01/HisenseTV.java +++ b/Chapter 04 Simple Factory/sample01/HisenseTV.java @@ -1,3 +1,5 @@ +package sample01; + public class HisenseTV implements TV { public void play() diff --git a/Chapter 04 Simple Factory/sample01/TV.java b/Chapter 04 Simple Factory/sample01/TV.java index cf0f503..0056d2c 100644 --- a/Chapter 04 Simple Factory/sample01/TV.java +++ b/Chapter 04 Simple Factory/sample01/TV.java @@ -1,3 +1,5 @@ +package sample01; + public interface TV { public void play(); diff --git a/Chapter 04 Simple Factory/sample01/TVFactory.java b/Chapter 04 Simple Factory/sample01/TVFactory.java index ded671d..073b25e 100644 --- a/Chapter 04 Simple Factory/sample01/TVFactory.java +++ b/Chapter 04 Simple Factory/sample01/TVFactory.java @@ -1,20 +1,23 @@ +package sample01; + + public class TVFactory { public static TV produceTV(String brand) throws Exception { if(brand.equalsIgnoreCase("Haier")) { - System.out.println("电视机工厂生产海尔电视机!"); + System.out.println("Haier"); return new HaierTV(); } else if(brand.equalsIgnoreCase("Hisense")) { - System.out.println("电视机工厂生产海信电视机!"); + System.out.println("Hisense"); return new HisenseTV(); } else { - throw new Exception("对不起,暂不能生产该品牌电视机!"); + throw new Exception("Other"); } } } \ No newline at end of file diff --git a/Chapter 04 Simple Factory/sample01/XMLUtilTV.java b/Chapter 04 Simple Factory/sample01/XMLUtilTV.java index 69ae749..ca2ad5e 100644 --- a/Chapter 04 Simple Factory/sample01/XMLUtilTV.java +++ b/Chapter 04 Simple Factory/sample01/XMLUtilTV.java @@ -1,6 +1,6 @@ +package sample01; import javax.xml.parsers.*; import org.w3c.dom.*; -import org.xml.sax.SAXException; import java.io.*; public class XMLUtilTV { @@ -13,7 +13,7 @@ public static String getBrandName() DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = dFactory.newDocumentBuilder(); Document doc; - doc = builder.parse(new File("configTV.xml")); + doc = builder.parse(new File("sample01/configTV.xml")); //获取包含品牌名称的文本节点 NodeList nl = doc.getElementsByTagName("brandName"); diff --git a/Chapter 04 Simple Factory/sample02/Administrator.java b/Chapter 04 Simple Factory/sample02/Administrator.java index 0fe57f5..ca472bc 100644 --- a/Chapter 04 Simple Factory/sample02/Administrator.java +++ b/Chapter 04 Simple Factory/sample02/Administrator.java @@ -1,3 +1,5 @@ +package sample02; + public class Administrator extends User { public Administrator() diff --git a/Chapter 04 Simple Factory/sample02/Client.java b/Chapter 04 Simple Factory/sample02/Client.java index 0d68acf..5986a9c 100644 --- a/Chapter 04 Simple Factory/sample02/Client.java +++ b/Chapter 04 Simple Factory/sample02/Client.java @@ -1,3 +1,5 @@ +package sample02; + public class Client { public static void main(String args[]) @@ -7,7 +9,7 @@ public static void main(String args[]) User user; UserDAO userDao=new UserDAO(); int permission=userDao.findPermission("zhangsan","123456"); - user=UserFactory.getUser(permission); + user= UserFactory.getUser(permission); user.sameOperation(); user.diffOperation(); } diff --git a/Chapter 04 Simple Factory/sample02/Employee.java b/Chapter 04 Simple Factory/sample02/Employee.java index 96b19a6..f52e7a9 100644 --- a/Chapter 04 Simple Factory/sample02/Employee.java +++ b/Chapter 04 Simple Factory/sample02/Employee.java @@ -1,3 +1,5 @@ +package sample02; + public class Employee extends User { public Employee() diff --git a/Chapter 04 Simple Factory/sample02/Manager.java b/Chapter 04 Simple Factory/sample02/Manager.java index fa56435..a6bb262 100644 --- a/Chapter 04 Simple Factory/sample02/Manager.java +++ b/Chapter 04 Simple Factory/sample02/Manager.java @@ -1,3 +1,5 @@ +package sample02; + public class Manager extends User { public Manager() diff --git a/Chapter 04 Simple Factory/sample02/User.java b/Chapter 04 Simple Factory/sample02/User.java index 131b3e4..6ffa2f9 100644 --- a/Chapter 04 Simple Factory/sample02/User.java +++ b/Chapter 04 Simple Factory/sample02/User.java @@ -1,3 +1,5 @@ +package sample02; + public abstract class User { public void sameOperation() diff --git a/Chapter 04 Simple Factory/sample02/UserDAO.java b/Chapter 04 Simple Factory/sample02/UserDAO.java index 7197120..bcc6176 100644 --- a/Chapter 04 Simple Factory/sample02/UserDAO.java +++ b/Chapter 04 Simple Factory/sample02/UserDAO.java @@ -1,3 +1,5 @@ +package sample02; + public class UserDAO { public int findPermission(String userName,String userPassword) diff --git a/Chapter 04 Simple Factory/sample02/UserFactory.java b/Chapter 04 Simple Factory/sample02/UserFactory.java index 74db80e..9bab10e 100644 --- a/Chapter 04 Simple Factory/sample02/UserFactory.java +++ b/Chapter 04 Simple Factory/sample02/UserFactory.java @@ -1,3 +1,5 @@ +package sample02; + public class UserFactory { public static User getUser(int permission) diff --git a/Chapter 04 Simple Factory/sample02/out/production/Chapter 04 Simple Factory/sample01/configTV.xml b/Chapter 04 Simple Factory/sample02/out/production/Chapter 04 Simple Factory/sample01/configTV.xml new file mode 100644 index 0000000..2173591 --- /dev/null +++ b/Chapter 04 Simple Factory/sample02/out/production/Chapter 04 Simple Factory/sample01/configTV.xml @@ -0,0 +1,4 @@ + + + TCL + \ No newline at end of file diff --git a/Chapter 05 Factory Method/sample01/Client.java b/Chapter 05 Factory Method/sample01/Client.java index a4fd352..c0c2c9d 100644 --- a/Chapter 05 Factory Method/sample01/Client.java +++ b/Chapter 05 Factory Method/sample01/Client.java @@ -1,3 +1,5 @@ +package sample01; + public class Client { public static void main(String args[]) @@ -6,7 +8,7 @@ public static void main(String args[]) { TV tv; TVFactory factory; - factory=(TVFactory)XMLUtil.getBean(); + factory=(TVFactory)XMLUtil.getBean("className"); tv=factory.produceTV(); tv.play(); } diff --git a/Chapter 05 Factory Method/sample01/HaierTV.java b/Chapter 05 Factory Method/sample01/HaierTV.java index d020697..0fad59a 100644 --- a/Chapter 05 Factory Method/sample01/HaierTV.java +++ b/Chapter 05 Factory Method/sample01/HaierTV.java @@ -1,3 +1,5 @@ +package sample01; + public class HaierTV implements TV { public void play() diff --git a/Chapter 05 Factory Method/sample01/HaierTVFactory.java b/Chapter 05 Factory Method/sample01/HaierTVFactory.java index c5ffe5b..b81c427 100644 --- a/Chapter 05 Factory Method/sample01/HaierTVFactory.java +++ b/Chapter 05 Factory Method/sample01/HaierTVFactory.java @@ -1,3 +1,5 @@ +package sample01; + public class HaierTVFactory implements TVFactory { public TV produceTV() diff --git a/Chapter 05 Factory Method/sample01/HisenseTV.java b/Chapter 05 Factory Method/sample01/HisenseTV.java index 09c6bb1..3219035 100644 --- a/Chapter 05 Factory Method/sample01/HisenseTV.java +++ b/Chapter 05 Factory Method/sample01/HisenseTV.java @@ -1,3 +1,5 @@ +package sample01; + public class HisenseTV implements TV { public void play() diff --git a/Chapter 05 Factory Method/sample01/HisenseTVFactory.java b/Chapter 05 Factory Method/sample01/HisenseTVFactory.java index a65a20c..cceba8a 100644 --- a/Chapter 05 Factory Method/sample01/HisenseTVFactory.java +++ b/Chapter 05 Factory Method/sample01/HisenseTVFactory.java @@ -1,3 +1,4 @@ +package sample01; public class HisenseTVFactory implements TVFactory { public TV produceTV() diff --git a/Chapter 05 Factory Method/sample01/TV.java b/Chapter 05 Factory Method/sample01/TV.java index cf0f503..36c4913 100644 --- a/Chapter 05 Factory Method/sample01/TV.java +++ b/Chapter 05 Factory Method/sample01/TV.java @@ -1,3 +1,4 @@ +package sample01; public interface TV { public void play(); diff --git a/Chapter 05 Factory Method/sample01/TVFactory.java b/Chapter 05 Factory Method/sample01/TVFactory.java index 2e486c1..484ce47 100644 --- a/Chapter 05 Factory Method/sample01/TVFactory.java +++ b/Chapter 05 Factory Method/sample01/TVFactory.java @@ -1,3 +1,4 @@ +package sample01; public interface TVFactory { public TV produceTV(); diff --git a/Chapter 05 Factory Method/sample01/XMLUtil.java b/Chapter 05 Factory Method/sample01/XMLUtil.java index a56a45f..9daf53e 100644 --- a/Chapter 05 Factory Method/sample01/XMLUtil.java +++ b/Chapter 05 Factory Method/sample01/XMLUtil.java @@ -1,3 +1,5 @@ +package sample01; + import javax.xml.parsers.*; import org.w3c.dom.*; import org.xml.sax.SAXException; @@ -5,7 +7,7 @@ public class XMLUtil { //该方法用于从XML配置文件中提取具体类类名,并返回一个实例对象 - public static Object getBean() + public static Object getBean(String className) { try { @@ -13,10 +15,10 @@ public static Object getBean() DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = dFactory.newDocumentBuilder(); Document doc; - doc = builder.parse(new File("config.xml")); + doc = builder.parse(new File("./sample01/config.xml")); //获取包含类名的文本节点 - NodeList nl = doc.getElementsByTagName("className"); + NodeList nl = doc.getElementsByTagName(className); Node classNode=nl.item(0).getFirstChild(); String cName=classNode.getNodeValue(); diff --git a/Chapter 05 Factory Method/sample01/config.xml b/Chapter 05 Factory Method/sample01/config.xml index 44c92a0..c53d641 100644 --- a/Chapter 05 Factory Method/sample01/config.xml +++ b/Chapter 05 Factory Method/sample01/config.xml @@ -1,4 +1,5 @@ - HaierTVFactory + sample01.HaierTVFactory + sample01.project.GifImageReaderFactory \ No newline at end of file diff --git a/Chapter 05 Factory Method/sample01/project/GifImageReader.java b/Chapter 05 Factory Method/sample01/project/GifImageReader.java new file mode 100644 index 0000000..44cc353 --- /dev/null +++ b/Chapter 05 Factory Method/sample01/project/GifImageReader.java @@ -0,0 +1,8 @@ +package sample01.project; + +public class GifImageReader implements ImageReader{ + @Override + public void readImage() { + System.out.println("Read gif image."); + } +} diff --git a/Chapter 05 Factory Method/sample01/project/GifImageReaderFactory.java b/Chapter 05 Factory Method/sample01/project/GifImageReaderFactory.java new file mode 100644 index 0000000..6e64d9f --- /dev/null +++ b/Chapter 05 Factory Method/sample01/project/GifImageReaderFactory.java @@ -0,0 +1,9 @@ +package sample01.project; + +public class GifImageReaderFactory implements ImageReaderFactory{ + @Override + public ImageReader getReader(){ + System.out.println("gif image reader factory is producing gif image reader"); + return new GifImageReader(); + } +} diff --git a/Chapter 05 Factory Method/sample01/project/ImageReader.java b/Chapter 05 Factory Method/sample01/project/ImageReader.java new file mode 100644 index 0000000..e3ef6e3 --- /dev/null +++ b/Chapter 05 Factory Method/sample01/project/ImageReader.java @@ -0,0 +1,5 @@ +package sample01.project; + +public interface ImageReader { + public void readImage(); +} diff --git a/Chapter 05 Factory Method/sample01/project/ImageReaderFactory.java b/Chapter 05 Factory Method/sample01/project/ImageReaderFactory.java new file mode 100644 index 0000000..2273992 --- /dev/null +++ b/Chapter 05 Factory Method/sample01/project/ImageReaderFactory.java @@ -0,0 +1,5 @@ +package sample01.project; + +public interface ImageReaderFactory { + public ImageReader getReader(); +} diff --git a/Chapter 05 Factory Method/sample01/project/PngImageReader.java b/Chapter 05 Factory Method/sample01/project/PngImageReader.java new file mode 100644 index 0000000..5870a4d --- /dev/null +++ b/Chapter 05 Factory Method/sample01/project/PngImageReader.java @@ -0,0 +1,8 @@ +package sample01.project; + +public class PngImageReader implements ImageReader{ + @Override + public void readImage() { + System.out.println("Png image reader read images."); + } +} diff --git a/Chapter 05 Factory Method/sample01/project/PngImageReaderFactory.java b/Chapter 05 Factory Method/sample01/project/PngImageReaderFactory.java new file mode 100644 index 0000000..e7403e5 --- /dev/null +++ b/Chapter 05 Factory Method/sample01/project/PngImageReaderFactory.java @@ -0,0 +1,9 @@ +package sample01.project; + +public class PngImageReaderFactory implements ImageReaderFactory { + @Override + public ImageReader getReader() { + System.out.println("Png Image Reader Factory start product Image Reader"); + return new PngImageReader(); + } +} diff --git a/Chapter 05 Factory Method/sample01/project/client/Client.java b/Chapter 05 Factory Method/sample01/project/client/Client.java new file mode 100644 index 0000000..3d0462b --- /dev/null +++ b/Chapter 05 Factory Method/sample01/project/client/Client.java @@ -0,0 +1,23 @@ +package sample01.project.client; + +import sample01.project.ImageReader; +import sample01.project.ImageReaderFactory; +import sample01.XMLUtil; + +public class Client { + public static void main(String args[]) + { + try + { + ImageReader ir; + ImageReaderFactory irf; + irf = (ImageReaderFactory) XMLUtil.getBean("ImageReaderFactory"); + ir = irf.getReader(); + ir.readImage(); + } + catch(Exception e) + { + System.out.println(e.getMessage()); + } + } +} diff --git a/Chapter 06 Abstract Factory/sample01/AirConditioner.java b/Chapter 06 Abstract Factory/sample01/AirConditioner.java index cac52c8..4983ccc 100644 --- a/Chapter 06 Abstract Factory/sample01/AirConditioner.java +++ b/Chapter 06 Abstract Factory/sample01/AirConditioner.java @@ -1,3 +1,4 @@ +package sample01; public interface AirConditioner { public void changeTemperature(); diff --git a/Chapter 06 Abstract Factory/sample01/Client.java b/Chapter 06 Abstract Factory/sample01/Client.java index 993d13a..01ed79e 100644 --- a/Chapter 06 Abstract Factory/sample01/Client.java +++ b/Chapter 06 Abstract Factory/sample01/Client.java @@ -1,3 +1,4 @@ +package sample01; public class Client { public static void main(String args[]) diff --git a/Chapter 06 Abstract Factory/sample01/EFactory.java b/Chapter 06 Abstract Factory/sample01/EFactory.java index e9d52e0..556c63e 100644 --- a/Chapter 06 Abstract Factory/sample01/EFactory.java +++ b/Chapter 06 Abstract Factory/sample01/EFactory.java @@ -1,3 +1,4 @@ +package sample01; public interface EFactory { public Television produceTelevision(); diff --git a/Chapter 06 Abstract Factory/sample01/HaierFactory.java b/Chapter 06 Abstract Factory/sample01/HaierFactory.java index 9f7e8e7..8bd8d09 100644 --- a/Chapter 06 Abstract Factory/sample01/HaierFactory.java +++ b/Chapter 06 Abstract Factory/sample01/HaierFactory.java @@ -1,3 +1,4 @@ +package sample01; public class HaierFactory implements EFactory { public Television produceTelevision() diff --git a/Chapter 06 Abstract Factory/sample01/HaierTelevision.java b/Chapter 06 Abstract Factory/sample01/HaierTelevision.java index b42f0d0..3101229 100644 --- a/Chapter 06 Abstract Factory/sample01/HaierTelevision.java +++ b/Chapter 06 Abstract Factory/sample01/HaierTelevision.java @@ -1,3 +1,4 @@ +package sample01; public class HaierTelevision implements Television { public void play() diff --git a/Chapter 06 Abstract Factory/sample01/HairAirConditioner.java b/Chapter 06 Abstract Factory/sample01/HairAirConditioner.java index 33b0313..51f70d0 100644 --- a/Chapter 06 Abstract Factory/sample01/HairAirConditioner.java +++ b/Chapter 06 Abstract Factory/sample01/HairAirConditioner.java @@ -1,3 +1,4 @@ +package sample01; public class HairAirConditioner implements AirConditioner { public void changeTemperature() diff --git a/Chapter 06 Abstract Factory/sample01/TCLAirConditioner.java b/Chapter 06 Abstract Factory/sample01/TCLAirConditioner.java index e02ea91..f35e870 100644 --- a/Chapter 06 Abstract Factory/sample01/TCLAirConditioner.java +++ b/Chapter 06 Abstract Factory/sample01/TCLAirConditioner.java @@ -1,3 +1,4 @@ +package sample01; public class TCLAirConditioner implements AirConditioner { public void changeTemperature() diff --git a/Chapter 06 Abstract Factory/sample01/TCLFactory.java b/Chapter 06 Abstract Factory/sample01/TCLFactory.java index 7258e26..14c5104 100644 --- a/Chapter 06 Abstract Factory/sample01/TCLFactory.java +++ b/Chapter 06 Abstract Factory/sample01/TCLFactory.java @@ -1,3 +1,4 @@ +package sample01; public class TCLFactory implements EFactory { public Television produceTelevision() diff --git a/Chapter 06 Abstract Factory/sample01/TCLTelevision.java b/Chapter 06 Abstract Factory/sample01/TCLTelevision.java index 698b2f9..04629ee 100644 --- a/Chapter 06 Abstract Factory/sample01/TCLTelevision.java +++ b/Chapter 06 Abstract Factory/sample01/TCLTelevision.java @@ -1,3 +1,4 @@ +package sample01; public class TCLTelevision implements Television { public void play() diff --git a/Chapter 06 Abstract Factory/sample01/Television.java b/Chapter 06 Abstract Factory/sample01/Television.java index 30fd67e..dbcc443 100644 --- a/Chapter 06 Abstract Factory/sample01/Television.java +++ b/Chapter 06 Abstract Factory/sample01/Television.java @@ -1,3 +1,4 @@ +package sample01; public interface Television { public void play(); diff --git a/Chapter 06 Abstract Factory/sample01/XMLUtil.java b/Chapter 06 Abstract Factory/sample01/XMLUtil.java index a56a45f..9855e1d 100644 --- a/Chapter 06 Abstract Factory/sample01/XMLUtil.java +++ b/Chapter 06 Abstract Factory/sample01/XMLUtil.java @@ -1,3 +1,4 @@ +package sample01; import javax.xml.parsers.*; import org.w3c.dom.*; import org.xml.sax.SAXException; @@ -13,7 +14,7 @@ public static Object getBean() DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = dFactory.newDocumentBuilder(); Document doc; - doc = builder.parse(new File("config.xml")); + doc = builder.parse(new File("./sample01/config.xml")); //获取包含类名的文本节点 NodeList nl = doc.getElementsByTagName("className"); diff --git a/Chapter 06 Abstract Factory/sample01/config.xml b/Chapter 06 Abstract Factory/sample01/config.xml index b70704d..9b7cb7d 100644 --- a/Chapter 06 Abstract Factory/sample01/config.xml +++ b/Chapter 06 Abstract Factory/sample01/config.xml @@ -1,4 +1,4 @@ - TCLFactory + sample01.TCLFactory \ No newline at end of file diff --git a/Chapter 06 Abstract Factory/sample01/homework/Client/GameClient.java b/Chapter 06 Abstract Factory/sample01/homework/Client/GameClient.java new file mode 100644 index 0000000..b4fdb22 --- /dev/null +++ b/Chapter 06 Abstract Factory/sample01/homework/Client/GameClient.java @@ -0,0 +1,19 @@ +package sample01.homework.Client; + +import sample01.homework.ControllerFactory; +import sample01.homework.InterfaceController; +import sample01.homework.LinuxFactory; +import sample01.homework.OperationController; + +public class GameClient { + public static void main(String[] args) { + ControllerFactory cf; + InterfaceController ic; + OperationController oc; + cf = new LinuxFactory(); + ic = cf.getInterfaceController(); + oc = cf.getOperationController(); + ic.control(); + oc.control(); + } +} diff --git a/Chapter 06 Abstract Factory/sample01/homework/ControllerFactory.java b/Chapter 06 Abstract Factory/sample01/homework/ControllerFactory.java new file mode 100644 index 0000000..ffe1f7b --- /dev/null +++ b/Chapter 06 Abstract Factory/sample01/homework/ControllerFactory.java @@ -0,0 +1,7 @@ +package sample01.homework; + +public interface ControllerFactory { + InterfaceController getInterfaceController(); + + OperationController getOperationController(); +} diff --git a/Chapter 06 Abstract Factory/sample01/homework/InterfaceController.java b/Chapter 06 Abstract Factory/sample01/homework/InterfaceController.java new file mode 100644 index 0000000..70cee63 --- /dev/null +++ b/Chapter 06 Abstract Factory/sample01/homework/InterfaceController.java @@ -0,0 +1,5 @@ +package sample01.homework; + +public interface InterfaceController { + public void control(); +} diff --git a/Chapter 06 Abstract Factory/sample01/homework/LinuxFactory.java b/Chapter 06 Abstract Factory/sample01/homework/LinuxFactory.java new file mode 100644 index 0000000..9eb3206 --- /dev/null +++ b/Chapter 06 Abstract Factory/sample01/homework/LinuxFactory.java @@ -0,0 +1,13 @@ +package sample01.homework; + +public class LinuxFactory implements ControllerFactory { + @Override + public InterfaceController getInterfaceController() { + return new LinuxInterfaceController(); + } + + @Override + public OperationController getOperationController() { + return new LinuxOperationController(); + } +} diff --git a/Chapter 06 Abstract Factory/sample01/homework/LinuxInterfaceController.java b/Chapter 06 Abstract Factory/sample01/homework/LinuxInterfaceController.java new file mode 100644 index 0000000..b7cdcc8 --- /dev/null +++ b/Chapter 06 Abstract Factory/sample01/homework/LinuxInterfaceController.java @@ -0,0 +1,8 @@ +package sample01.homework; + +public class LinuxInterfaceController implements InterfaceController { + @Override + public void control() { + System.out.println("Linux interface is controlling"); + } +} diff --git a/Chapter 06 Abstract Factory/sample01/homework/LinuxOperationController.java b/Chapter 06 Abstract Factory/sample01/homework/LinuxOperationController.java new file mode 100644 index 0000000..8cc8bdf --- /dev/null +++ b/Chapter 06 Abstract Factory/sample01/homework/LinuxOperationController.java @@ -0,0 +1,8 @@ +package sample01.homework; + +public class LinuxOperationController implements OperationController { + @Override + public void control() { + System.out.println("linux operation is controlling"); + } +} diff --git a/Chapter 06 Abstract Factory/sample01/homework/OperationController.java b/Chapter 06 Abstract Factory/sample01/homework/OperationController.java new file mode 100644 index 0000000..26b34dd --- /dev/null +++ b/Chapter 06 Abstract Factory/sample01/homework/OperationController.java @@ -0,0 +1,5 @@ +package sample01.homework; + +public interface OperationController { + public void control(); +} diff --git a/Chapter 06 Abstract Factory/sample01/homework/WindowsFactory.java b/Chapter 06 Abstract Factory/sample01/homework/WindowsFactory.java new file mode 100644 index 0000000..cd0bcbc --- /dev/null +++ b/Chapter 06 Abstract Factory/sample01/homework/WindowsFactory.java @@ -0,0 +1,13 @@ +package sample01.homework; + +public class WindowsFactory implements ControllerFactory { + @Override + public InterfaceController getInterfaceController() { + return new WindowsInterfaceController(); + } + + @Override + public OperationController getOperationController() { + return new WindowsOperationController(); + } +} diff --git a/Chapter 06 Abstract Factory/sample01/homework/WindowsInterfaceController.java b/Chapter 06 Abstract Factory/sample01/homework/WindowsInterfaceController.java new file mode 100644 index 0000000..6224b8f --- /dev/null +++ b/Chapter 06 Abstract Factory/sample01/homework/WindowsInterfaceController.java @@ -0,0 +1,8 @@ +package sample01.homework; + +public class WindowsInterfaceController implements InterfaceController { + @Override + public void control() { + System.out.println("Windows interface is controlling."); + } +} diff --git a/Chapter 06 Abstract Factory/sample01/homework/WindowsOperationController.java b/Chapter 06 Abstract Factory/sample01/homework/WindowsOperationController.java new file mode 100644 index 0000000..a9323e7 --- /dev/null +++ b/Chapter 06 Abstract Factory/sample01/homework/WindowsOperationController.java @@ -0,0 +1,8 @@ +package sample01.homework; + +public class WindowsOperationController implements OperationController { + @Override + public void control() { + System.out.println("Windows Operation is controlling"); + } +} From 299d232edca15ca6298bc07f449215c9f6d3fdef Mon Sep 17 00:00:00 2001 From: zclhit <273239067@qq.com> Date: Sun, 14 Apr 2019 17:32:28 +0800 Subject: [PATCH 2/2] add home work and test method. --- Chapter 08 Prototype/homework/Address.java | 20 ++++++++++++++++++ Chapter 08 Prototype/homework/Customer.java | 20 ++++++++++++++++++ .../homework/EhanSingleton.java | 9 ++++++++ .../homework/IoDHSingleton.java | 14 ++++++++++++ .../homework/LanhanSingleton.java | 18 ++++++++++++++++ Chapter 10 Adapter/sample02/config.xml | 2 +- Chapter 11 Bridge/homework/Client.java | 8 +++++++ Chapter 11 Bridge/homework/DbConnector.java | 3 +++ Chapter 11 Bridge/homework/Generator.java | 10 +++++++++ .../homework/MySQLDBConnector.java | 6 ++++++ Chapter 11 Bridge/homework/PDFGenerator.java | 7 ++++++ .../homework/PostgrelDBConnector.java | 6 ++++++ Chapter 11 Bridge/homework/TXTGenerator.java | 7 ++++++ Chapter 11 Bridge/homework/UML.png | Bin 0 -> 32486 bytes Chapter 11 Bridge/homework/XMLGenerator.java | 7 ++++++ 15 files changed, 136 insertions(+), 1 deletion(-) create mode 100644 Chapter 08 Prototype/homework/Address.java create mode 100644 Chapter 08 Prototype/homework/Customer.java create mode 100644 Chapter 09 Singleton/homework/EhanSingleton.java create mode 100644 Chapter 09 Singleton/homework/IoDHSingleton.java create mode 100644 Chapter 09 Singleton/homework/LanhanSingleton.java create mode 100644 Chapter 11 Bridge/homework/Client.java create mode 100644 Chapter 11 Bridge/homework/DbConnector.java create mode 100644 Chapter 11 Bridge/homework/Generator.java create mode 100644 Chapter 11 Bridge/homework/MySQLDBConnector.java create mode 100644 Chapter 11 Bridge/homework/PDFGenerator.java create mode 100644 Chapter 11 Bridge/homework/PostgrelDBConnector.java create mode 100644 Chapter 11 Bridge/homework/TXTGenerator.java create mode 100644 Chapter 11 Bridge/homework/UML.png create mode 100644 Chapter 11 Bridge/homework/XMLGenerator.java diff --git a/Chapter 08 Prototype/homework/Address.java b/Chapter 08 Prototype/homework/Address.java new file mode 100644 index 0000000..db68bf7 --- /dev/null +++ b/Chapter 08 Prototype/homework/Address.java @@ -0,0 +1,20 @@ +public class Address implements Cloneable { + private String addNo; + public Address clone(){ + Address add = null; + try { + add = (Address)super.clone(); + } catch (CloneNotSupportedException e) { + System.out.println("class not cloneable."); + } + return add; + } + + public String getAddNo() { + return addNo; + } + + public void setAddNo(String addNo) { + this.addNo = addNo; + } +} diff --git a/Chapter 08 Prototype/homework/Customer.java b/Chapter 08 Prototype/homework/Customer.java new file mode 100644 index 0000000..398fc89 --- /dev/null +++ b/Chapter 08 Prototype/homework/Customer.java @@ -0,0 +1,20 @@ +public class Customer { + private Address addr; + + public Address getAddr() { + return addr; + } + + public void setAddr(Address addr) { + this.addr = addr; + } + + public static void main(String[] args) { + Customer c = new Customer(); + Address add = new Address(); + add.setAddNo("aaa"); + c.setAddr(add); + Address add2 = c.getAddr().clone(); + System.out.println(add == add2); + } +} diff --git a/Chapter 09 Singleton/homework/EhanSingleton.java b/Chapter 09 Singleton/homework/EhanSingleton.java new file mode 100644 index 0000000..6d9ce9b --- /dev/null +++ b/Chapter 09 Singleton/homework/EhanSingleton.java @@ -0,0 +1,9 @@ +public class EhanSingleton { + // Ehan model, initialize while create class + private static final EhanSingleton instance = new EhanSingleton(); + private EhanSingleton(){}; + + public static EhanSingleton getInstance(){ + return instance; + } +} diff --git a/Chapter 09 Singleton/homework/IoDHSingleton.java b/Chapter 09 Singleton/homework/IoDHSingleton.java new file mode 100644 index 0000000..88520a6 --- /dev/null +++ b/Chapter 09 Singleton/homework/IoDHSingleton.java @@ -0,0 +1,14 @@ +public class IoDHSingleton { + // rewrite builder + private IoDHSingleton() { + } + + // static inner class + private static class HolderClass { + private static final IoDHSingleton instance = new IoDHSingleton(); + } + + public static IoDHSingleton getInstance() { + return HolderClass.instance; + } +} diff --git a/Chapter 09 Singleton/homework/LanhanSingleton.java b/Chapter 09 Singleton/homework/LanhanSingleton.java new file mode 100644 index 0000000..40e6382 --- /dev/null +++ b/Chapter 09 Singleton/homework/LanhanSingleton.java @@ -0,0 +1,18 @@ +public class LanhanSingleton { + private volatile static LanhanSingleton instance = null; + private LanhanSingleton(){} + + public LanhanSingleton getInstance() { + // first check + if (null == instance) { + // lock class + synchronized (LanhanSingleton.class) { + // second check + if (null == instance) { + instance = new LanhanSingleton(); + } + } + } + return instance; + } +} diff --git a/Chapter 10 Adapter/sample02/config.xml b/Chapter 10 Adapter/sample02/config.xml index 323ecb8..c320850 100644 --- a/Chapter 10 Adapter/sample02/config.xml +++ b/Chapter 10 Adapter/sample02/config.xml @@ -1,4 +1,4 @@ - NewCipherAdapter + CipherAdapter \ No newline at end of file diff --git a/Chapter 11 Bridge/homework/Client.java b/Chapter 11 Bridge/homework/Client.java new file mode 100644 index 0000000..21fdc2f --- /dev/null +++ b/Chapter 11 Bridge/homework/Client.java @@ -0,0 +1,8 @@ +public class Client { + public static void main(String[] args) { + DbConnector connector = new PostgrelDBConnector(); + Generator generator = new PDFGenerator(); + generator.setConnector(connector); + generator.exportFile(); + } +} diff --git a/Chapter 11 Bridge/homework/DbConnector.java b/Chapter 11 Bridge/homework/DbConnector.java new file mode 100644 index 0000000..8877b65 --- /dev/null +++ b/Chapter 11 Bridge/homework/DbConnector.java @@ -0,0 +1,3 @@ +public interface DbConnector { + void connectDB(); +} diff --git a/Chapter 11 Bridge/homework/Generator.java b/Chapter 11 Bridge/homework/Generator.java new file mode 100644 index 0000000..08a7a2a --- /dev/null +++ b/Chapter 11 Bridge/homework/Generator.java @@ -0,0 +1,10 @@ +abstract class Generator { + protected DbConnector connector; + + // set connector + public void setConnector(DbConnector connector) { + this.connector = connector; + } + + abstract void exportFile(); +} diff --git a/Chapter 11 Bridge/homework/MySQLDBConnector.java b/Chapter 11 Bridge/homework/MySQLDBConnector.java new file mode 100644 index 0000000..ae449c1 --- /dev/null +++ b/Chapter 11 Bridge/homework/MySQLDBConnector.java @@ -0,0 +1,6 @@ +public class MySQLDBConnector implements DbConnector { + @Override + public void connectDB() { + System.out.println("read from mysql db"); + } +} diff --git a/Chapter 11 Bridge/homework/PDFGenerator.java b/Chapter 11 Bridge/homework/PDFGenerator.java new file mode 100644 index 0000000..d5f932c --- /dev/null +++ b/Chapter 11 Bridge/homework/PDFGenerator.java @@ -0,0 +1,7 @@ +public class PDFGenerator extends Generator { + @Override + void exportFile() { + this.connector.connectDB(); + System.out.println("generate PDF file."); + } +} diff --git a/Chapter 11 Bridge/homework/PostgrelDBConnector.java b/Chapter 11 Bridge/homework/PostgrelDBConnector.java new file mode 100644 index 0000000..a7fe717 --- /dev/null +++ b/Chapter 11 Bridge/homework/PostgrelDBConnector.java @@ -0,0 +1,6 @@ +public class PostgrelDBConnector implements DbConnector { + @Override + public void connectDB() { + System.out.println("read from postgrel db."); + } +} diff --git a/Chapter 11 Bridge/homework/TXTGenerator.java b/Chapter 11 Bridge/homework/TXTGenerator.java new file mode 100644 index 0000000..be1be94 --- /dev/null +++ b/Chapter 11 Bridge/homework/TXTGenerator.java @@ -0,0 +1,7 @@ +public class TXTGenerator extends Generator { + @Override + void exportFile() { + this.connector.connectDB(); + System.out.println("generate txt file."); + } +} diff --git a/Chapter 11 Bridge/homework/UML.png b/Chapter 11 Bridge/homework/UML.png new file mode 100644 index 0000000000000000000000000000000000000000..6d584757b28a6a583b26b97aca94cc5ae7a35893 GIT binary patch literal 32486 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⩔f!e_jsYacz#!jt#E|Bg{8{F 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
    ;Vf%{ZFW-_$V2K6f*3oY+f#ir4S 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 literal 0 HcmV?d00001 diff --git a/Chapter 11 Bridge/homework/XMLGenerator.java b/Chapter 11 Bridge/homework/XMLGenerator.java new file mode 100644 index 0000000..3e058bd --- /dev/null +++ b/Chapter 11 Bridge/homework/XMLGenerator.java @@ -0,0 +1,7 @@ +public class XMLGenerator extends Generator { + @Override + void exportFile() { + this.connector.connectDB(); + System.out.println("generate xml file."); + } +}