JAVAサンプル8)オブジェクト向け---オブジェクト向けの設計パターン、ゴミ回収
9985 ワード
8.3オブジェクト向け設計モード
インスタンス156 Singleton単一モード
例157採用(簡易工場モデル)
インスタンス158同窓会(工場メソッドモード)
例159図書展(抽象工場モード)
例160自動車アダプタ(Adapterアダプタモード)
8.4ゴミ回収
例161ゴミ回収の仕組み
インスタンス156 Singleton単一モード
public class TestClass { //
public static void main(String[] args) {
Singleton object1 = Singleton.getSingleton(); //
Singleton object2 = Singleton.getSingleton(); //
System.out.println(" Singleton :");
System.out.println(" next() :");
System.out.println("object1.amount=" + object1.getAmount());
System.out.println("object2.amount=" + object2.getAmount());
object1.next(); //
System.out.println("
next() :");
System.out.println("object1.amount=" + object1.getAmount());
System.out.println("object2.amount=" + object2.getAmount());
}
}
class Singleton {
private static int amount = 5; //
private static Singleton singleton = new Singleton();// Singleton
private Singleton() { // private Singleton
}
public static Singleton getSingleton() { // Singleton
return singleton;
}
public synchronized int getAmount() { // synchronized
return amount; //
}
public synchronized void next() { // amount 1
amount++;
}
}
例157採用(簡易工場モデル)
public class FactoryOne {
public static void main(String[] args) {
try {
Person person = Recruitment.findWork("Middle_Programmer"); //
System.out.println(" ?");
person.experience(); //
} catch (Exception e) { //
System.out.println(" , ");
} finally { //
System.out.println("......");
}
}
}
class Recruitment {
public static Person findWork(String s) throws Exception {
if (s.equalsIgnoreCase("Low_Programmer")) { //
return new Low_Programmer();
} else if (s.equalsIgnoreCase("Middle_Programmer")) {
return new Middle_Programmer();
} else if (s.equalsIgnoreCase("High_Programmer")) {
return new High_Programmer();
} else {
throw new Exception(); //
}
}
}
interface Person {
public void experience(); //
}
class Low_Programmer implements Person { //
public void experience() {
System.out.println(" , !!");
}
}
class Middle_Programmer implements Person {//
public void experience() {
System.out.println(" , !");
}
}
class High_Programmer implements Person {//
public void experience() {
System.out.println(" , !");
}
}
インスタンス158同窓会(工場メソッドモード)
package Chapter08;
public class FactoryTwo {
public static void main(String[] args) { // java
try {
Forms form = new ShangHai();//
MeetOfStudents mos = form.place(); //
System.out.println(" ?");
mos.form(); //
} catch (Exception e) { //
System.out.println(" ?");
} finally { //
System.out.println("......");
}
}
}
interface MeetOfStudents {//
public void form();
}
interface Forms {//
public MeetOfStudents place();
}
class Hotels implements MeetOfStudents {//
public void form() {
System.out.println(" !");
}
}
class Home implements MeetOfStudents {//
public void form() {
System.out.println(" , ");
}
}
class Nightclub implements MeetOfStudents {//
public void form() {
System.out.println(" High , ");
}
}
class QinHuangDao implements Forms {//
public MeetOfStudents place() {
return new Hotels();
}
}
class ShangHai implements Forms {//
public MeetOfStudents place() {
return new Nightclub();
}
}
class BeiJing implements Forms {//
public MeetOfStudents place() {
return new Home();
}
}
例159図書展(抽象工場モード)
public class FactoryThree {
public static void main(String[] args) {
PropertyOfBook garden = ShowBooks.getProperty(" "); //
Book bookname = garden.getBookName(); //
Book author = garden.getAuthor(); //
Book price = garden.getPrice(); //
System.out.println(" :" + bookname.getName());
System.out.println(" :" + author.getName());
System.out.println(" :" + price.getName());
}
}
class Book { //
String name; //
public Book(String name) { //
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
abstract class PropertyOfBook { //
public abstract Book getAuthor(); //
public abstract Book getPrice(); //
public abstract Book getBookName(); //
}
class Computer extends PropertyOfBook { //
public Book getAuthor() {
return new Book(" ");
}
public Book getBookName() {
return new Book("Java Web ");
}
public Book getPrice() {
return new Book("88.00");
}
}
class English extends PropertyOfBook //
{
public Book getAuthor() {
return new Book(" ");
}
public Book getBookName() {
return new Book(" ");
}
public Book getPrice() {
return new Book("35.8");
}
}
class Health extends PropertyOfBook //
{
public Book getAuthor() {
return new Book(" ");
}
public Book getBookName() {
return new Book(" 10 ");
}
public Book getPrice() {
return new Book("66.9");
}
}
class ShowBooks { //
private static PropertyOfBook po;
public static PropertyOfBook getProperty(String type) {
po = new Computer(); //
if (type.equals(" "))
po = new English();
if (type.equals(" "))
po = new Health();
return po;
}
}
例160自動車アダプタ(Adapterアダプタモード)
public class Adapter {
public static void main(String[] args) {
Honda honda = new Honda(); //
honda.setColor("red"); //
honda.display(); //
honda.move(); //
AudiAdapter audi = new AudiAdapter();//
audi.setColor("black"); //
audi.setSpeed(60);
audi.display(); //
audi.move(); //
}
}
interface Car { //
public void setColor(String color); //
public String getColor(); //
public void setSpeed(int Speed); //
public int getSpeed(); //
public void move(); //
public void display(); //
}
class Honda implements Car { // car
String color;
int speed;
public void setColor(String color) {
this.color = color;
}
public String getColor() {
return this.color;
}
public int getSpeed() {
return this.speed;
}
public void setSpeed(int speed) {
this.speed = speed;
}
public void move() {
System.out.println(" :" + 3 * speed);
}
public void display() {
System.out.println(" :" + color);
}
}
class Audi { // , Car
String color;
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public void display() {
System.out.println(" :" + color);
}
}
class AudiAdapter implements Car {
private Audi audi;
private int speed;
public AudiAdapter() {
audi = new Audi();
}
public void display() {
audi.display();
}
public String getColor() {
return audi.getColor();
}
public void setColor(String color) {
audi.setColor(color);
}
// Move() setSpeed getSpeed
public int getSpeed() {
return speed;
}
public void move() {
System.out.println(" :" + 3 * speed);
}
public void setSpeed(int speed) {
this.speed = speed;
}
}
8.4ゴミ回収
例161ゴミ回収の仕組み
public class GarbageCollector {
static int count;
int index;
GarbageCollector() {
count++;
System.out.println("object " + count + " is constracted");
setid(count);
}
void setid(int id) {
index = id;
}
protected void finalize(int count) {
System.out.println("object " + index
+ " is GarbageCollectord collection");
}
public static void main(String args[]) {
new GarbageCollector();
new GarbageCollector();
new GarbageCollector();
new GarbageCollector();
new GarbageCollector();
System.gc();
}
}