Răsfoiți Sursa

commit java

admin 1 an în urmă
comite
3ae992009c

+ 18 - 0
fanshe/src/main/Factory.java

@@ -0,0 +1,18 @@
+package main;
+
+public class Factory {
+    public static Product getInstance(String className)
+    {
+        Product realProduct = null;
+        try
+        {
+            Class pClass = Class.forName(className);
+            realProduct = (Product) pClass.newInstance();
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+        return realProduct;
+    }
+}

+ 105 - 0
fanshe/src/main/FactoryTest.java

@@ -0,0 +1,105 @@
+package main;//
+//public class main.FactoryTest
+//{
+//    public static void main(String[] args)
+//    {
+//        try
+//        {
+//            main.Product productA = main.Factory.getInstance("main.ProductA");
+//            productA.show();
+//        }
+//        catch (NullPointerException e)
+//        {
+//            System.out.println("没有A这款产品,无法生产~");
+//        }
+//
+//        try
+//        {
+//            main.Product productB = main.Factory.getInstance("main.ProductB");
+//            productB.show();
+//        }
+//        catch (NullPointerException e)
+//        {
+//            System.out.println("没有B这款产品,无法生产~");
+//        }
+//
+//        try
+//        {
+//            main.Product productC = main.Factory.getInstance("main.ProductC");
+//            productC.show();
+//        }
+//        catch (NullPointerException e)
+//        {
+//            System.out.println("没有C这款产品,无法生产~");
+//        }
+//
+//        try
+//        {
+//            main.Product productD = main.Factory.getInstance("ProductD");
+//            productD.show();
+//        }
+//        catch (Exception e)
+//        {
+//            System.out.println("没有D这款产品,无法生产~");
+//        }
+//    }
+//}
+
+import org.junit.Test;
+
+import java.io.IOException;
+import java.util.Properties;
+
+public class FactoryTest
+{
+    @Test
+    public void test() throws IOException
+    {
+        ClassLoader classLoader = this.getClass().getClassLoader();
+        Properties prop = new Properties();
+        prop.load(classLoader.getResourceAsStream("main/Product.properties"));
+        String className = "";
+        try
+        {
+            className = prop.getProperty("ProductA");
+            Product productA = Factory.getInstance(className);
+            productA.show();
+        }
+        catch (NullPointerException e)
+        {
+            System.out.println("没有A这款产品,无法生产~");
+        }
+
+        try
+        {
+            className = prop.getProperty("ProductB");
+            Product productA = Factory.getInstance(className);
+            productA.show();
+        }
+        catch (NullPointerException e)
+        {
+            System.out.println("没有B这款产品,无法生产~");
+        }
+
+        try
+        {
+            className = prop.getProperty("ProductC");
+            Product productA = Factory.getInstance(className);
+            productA.show();
+        }
+        catch (NullPointerException e)
+        {
+            System.out.println("没有C这款产品,无法生产~");
+        }
+        try
+        {
+            className = prop.getProperty("ProductD");
+            Product productA = Factory.getInstance(className);
+            productA.show();
+        }
+        catch (NullPointerException e)
+        {
+            System.out.println("没有D这款产品,无法生产~");
+        }
+    }
+}

+ 6 - 0
fanshe/src/main/Product.java

@@ -0,0 +1,6 @@
+package main;
+
+public interface Product
+{
+    public abstract void show();
+}

+ 7 - 0
fanshe/src/main/Product.properties

@@ -0,0 +1,7 @@
+ProductA = main.ProductA
+
+ProductB = main.ProductB
+
+ProductC = main.ProductC
+
+ProductD = main.ProductD

+ 11 - 0
fanshe/src/main/ProductA.java

@@ -0,0 +1,11 @@
+package main;
+
+public class ProductA implements Product
+{
+    @Override
+    public void show()
+    {
+        System.out.println("生产了产品A");
+    }
+}
+

+ 10 - 0
fanshe/src/main/ProductB.java

@@ -0,0 +1,10 @@
+package main;
+
+public class ProductB implements Product
+{
+    @Override
+    public void show()
+    {
+        System.out.println("生产了产品B");
+    }
+}

+ 10 - 0
fanshe/src/main/ProductC.java

@@ -0,0 +1,10 @@
+package main;
+
+public class ProductC implements Product
+{
+    @Override
+    public void show()
+    {
+        System.out.println("生产了产品C");
+    }
+}

+ 25 - 0
fanshe/src/main/SimpleFactory.java

@@ -0,0 +1,25 @@
+package main;
+
+public class SimpleFactory
+{
+    /**
+     * 实现简单工厂模式
+     * @param pName 产品标识
+     * @return 返回具体的产品
+     */
+    public static Product createProduct(String pName)
+    {
+        switch (pName)
+        {
+            case "A":
+                return new ProductA();
+            case "B":
+                return new ProductB();
+            case "C":
+                return new ProductC();
+            default:
+                return null;
+        }
+
+    }
+}

+ 44 - 0
fanshe/src/main/SimpleFactoryTest.java

@@ -0,0 +1,44 @@
+package main;// Press Shift twice to open the Search Everywhere dialog and type `show whitespaces`,
+// then press Enter. You can now see whitespace characters in your code.
+
+public class SimpleFactoryTest
+{
+    public static void main(String[] args)
+    {
+        try
+        {
+            SimpleFactory.createProduct("A").show();
+        }
+        catch (NullPointerException e)
+        {
+            System.out.println("没有A这款产品,无法生产~");
+        }
+
+        try
+        {
+            SimpleFactory.createProduct("B").show();
+        }
+        catch (NullPointerException e)
+        {
+            System.out.println("没有B这款产品,无法生产~");
+        }
+
+        try
+        {
+            SimpleFactory.createProduct("C").show();
+        }
+        catch (NullPointerException e)
+        {
+            System.out.println("没有C这款产品,无法生产~");
+        }
+
+        try
+        {
+            SimpleFactory.createProduct("D").show();
+        }
+        catch (NullPointerException e)
+        {
+            System.out.println("没有D这款产品,无法生产~");
+        }
+    }
+}

+ 11 - 0
rmi/src/fanshe/GreetingService.java

@@ -0,0 +1,11 @@
+package fanshe;
+
+import java.rmi.Remote;
+import java.rmi.RemoteException;
+
+//1. 创建远程接口
+public interface GreetingService extends Remote {
+
+     public StringBuffer remoteGreet(StringBuffer msg) throws RemoteException;
+
+}

+ 42 - 0
rmi/src/fanshe/GreetingServiceImp.java

@@ -0,0 +1,42 @@
+package fanshe;
+
+import java.rmi.RemoteException;
+import java.rmi.server.UnicastRemoteObject;
+
+//2. 创建远程类
+//使远程类继承 java.rmi.server.UnicastRemoteObjcct 类,并且远程类的构构方法必声明抛出 RemoteException
+public class GreetingServiceImp extends UnicastRemoteObject implements GreetingService {
+    private StringBuffer name;
+
+    public GreetingServiceImp(StringBuffer name) throws RemoteException {
+        this.name = name;
+    }
+
+    public StringBuffer remoteGreet(StringBuffer msg) throws RemoteException {
+
+        System.out.println(name + " :implements method remoteGreet");
+        return new StringBuffer("greet;").append(msg).append(new StringBuffer(" from ")).append(name);
+
+    }
+}
+
+//如果一个远程类已经继承了其他类,无法再继承 UnicastRemoteObiect 类,那么可以在构造方法中调用 UnicastRemoteObject 类的静态\
+// expotObject 方法,同样,远程类的构造方法也必须声明抛出 RemoteException
+
+//public class GreetingServiceImp extends OtherClass implements GreetingService {
+//
+//    private StringBuffer name;
+//
+//    public GreetingServiceImp(StringBuffer name) throws RemoteException {
+//        this.name = name;
+//        //参数 port 指定监听的端口,如果取值为0,就表示监听任意一个匿名端口
+//        UnicagtRemoteObject.exportobject(this, 0);
+//    }
+//
+//    public StringBuffer remoteGreet(StringBuffer msg) throws RemoteException {
+//
+//        System.out.println(name + " :implements method remoteGreet");
+//        return new StringBuffer("greet;").append(msg).append(new StringBuffer(" from ")).append(name);
+//
+//    }
+//}

+ 29 - 0
rmi/src/fanshe/SimpleClient.java

@@ -0,0 +1,29 @@
+package fanshe;
+
+import java.rmi.*;
+import java.rmi.registry.LocateRegistry;
+import java.rmi.registry.Registry;
+
+//4. 创建客户程序
+//下例的 SimpleClient 类先获得远程对象的存根对象,接着调用它的远程方法
+
+
+
+public class SimpleClient {
+
+    public static void main(String args[]) throws RemoteException {
+        try {
+            //返回本地主机的RMI注册器对象,参数port指定RMI注册器监听的端口
+            Registry registry = LocateRegistry.getRegistry(1099);
+            //查找对象,返回与参数name指定的名字所绑定的对象
+            //返回的是一个名为"com.sun.proxy.$Proxy0"的动态代理类的实例
+            GreetingService service1 = (GreetingService) registry.lookup("GreetingService1");
+            GreetingService service2 = (GreetingService) registry.lookup("GreetingService2");
+
+            System.out.println(service1.remoteGreet(new StringBuffer("Greetings!")));
+            System.out.println(service2.remoteGreet(new StringBuffer("Greetings!")));
+        } catch (NotBoundException e) {
+            throw new RuntimeException(e);
+        }
+    }
+}

+ 28 - 0
rmi/src/fanshe/SimpleServer.java

@@ -0,0 +1,28 @@
+package fanshe;
+
+import java.rmi.*;
+import java.rmi.registry.LocateRegistry;
+import java.rmi.registry.Registry;
+
+//3. 创建服务器程序
+//RMI 采用一种命名服务机制来使得客户程序可以找到服务器上的一个远程对象,RMI注册器提供这种命名服务。好比电话查询系统,\
+//那些希望对外公开联系方式的单位先到查询系统登记,当客户想知道某个单位的联系方式时,只需向查询系统提供单位的名字,查询\
+//系统就会返回该单位的联系方式
+
+public class SimpleServer {
+
+    public static void main( String args[]) {
+        try {
+            GreetingService service1 = new GreetingServiceImp(new StringBuffer("service1"));
+            GreetingService service2 = new GreetingServiceImp(new StringBuffer("service2"));
+
+            //创建并启动注册器
+            Registry registry = LocateRegistry.createRegistry(1099);
+            //注册远程对象
+            registry.rebind("GreetingService1", service1);
+            registry.rebind("GreetingService2", service2);
+        } catch(Exception e) {
+            e.printStackTrace();
+        }
+    }
+}