01/10/2018, 11:58

Hỏi cách cài đặt Singleton cho bài tập C++

Mình có bài tập như này:

Render to Scene (4 pts)

Figure 1 A SceneManager class that manages all objects.

There are 2 requirements in this first task:

a) Create classes as following structure:

  •      Create a SceneManager class to manage all objects in the scene.
    

o Update (float frameTime)
o Render()
o AddObject(Object *object);
o Init() // Load Objects from a text file.

  •      Create Object class:
    

o position // current position of the object
o mass // the mass of the object
o velocity
o Render()
o Update(float frameTime)

  •      From object class: extends to Rectangle, Circle and Plane (to make the four walls)
    

Mọi người cho hỏi dùng Singleton design pattern C++ để biểu diễn các class, các thuộc tính vào phương thức như nào cho hợp lý ạ, mình cảm ơn

Tao Không Ngu. viết 14:12 ngày 01/10/2018

Hi Long Thành.
Singleton design pattern là cái gì vậy ?

Long Thành viết 14:06 ngày 01/10/2018

Là Singleton Pattern đấy bác, em newbie bác đừng bắt bẻ em quá chứ

STDIO

Design Pattern: Singleton Pattern :: Bài viết :: STDIO

Làm thế nào để hiện thực được một đối tượng tồn tại duy nhất song có thể truy xuất mọi lúc mọi nơi trong chương trình. Để giải bài toán trên, người ta hướng đến một giải pháp là sử dụng Singleton pattern.

Tao Không Ngu. viết 13:58 ngày 01/10/2018

Hi Long Thành.
tồn tại duy nhất song có thể truy xuất mọi lúc mọi nơi

Long Thành viết 14:00 ngày 01/10/2018

y nhất song có thể truy xuất mọi lúc mọi nơi

vâng cái này thì em biết rồi

Tao Không Ngu. viết 14:00 ngày 01/10/2018

Hi Long Thành.
???

Long Thành viết 14:08 ngày 01/10/2018

Nhưng mà triển khai như nào ấy ạ

Tao Không Ngu. viết 14:00 ngày 01/10/2018

Hi Long Thành.
Banj xem lớp nào cần như vậy thì viết nó là Singleton là xong. Thường là mấy lớp quản lý hoặc lớp thông tin hệ thống hoặc cache.

Long Thành viết 14:05 ngày 01/10/2018

Viết nó là S là sao ạ? em không hiểu lắm

Dark.Hades viết 13:58 ngày 01/10/2018

Nhìn bài hình như là game engine thì phải.

Mình khuyên là hạn chế dùng singleton nhất có thể, trừ khi nó là thứ chạy xuyên suốt chương trình như Logger, còn lại thì đừng nên dùng
Nếu tạo singleton thì tạo sẵn 1 class abstract là singleton, sau đó kế thừa nó.

Bạn có thể google xem mẫu.

stackoverflow.com
Artem Barger

C++ Singleton design pattern

c++, design-patterns, singleton
asked by Artem Barger on 04:02PM - 17 Jun 09
Tao Không Ngu. viết 14:13 ngày 01/10/2018

Hi Dark.Hades.
Cái vụ kế thừa lại phải đi ép kiểu có vẻ không đúng lắm thì phải.

Dark.Hades viết 13:59 ngày 01/10/2018

Làm template là xong đâu cần phải ép kiểu đâu nhỉ
https://sites.google.com/site/sbskit/gamefornewbie/11-singleton-template-class

Cẩm Huỳnh viết 14:07 ngày 01/10/2018

Chào bạn @duy_nguyen_duc1,

Singleton là một design pattern hay được dùng khi bạn muốn hạn chế việc khởi tạo object từ một class. Ví dụ như bạn muốn hạn chế toàn ứng dụng chỉ có một object được ghi file, một object được ghi log hay chỉ có một database connection pool chẳng hạn.

Giả sử mình có chương trình tên là Foo và cần một FooManager để quản lý toàn cục các thứ mình có trong app. Mã giả mình sẽ viết như sau.

class FooManager {
  // khởi tạo một đối tượng instance là biến static của class.
  // chú ý là tùy mỗi ngôn ngữ sẽ có cách khởi tạo khác nhau.
  static FooManger instance = new FooManager();

  // hàm khởi tạo của class
  function FooManager() {
    this.logger = this.initLogger();
    this.connectionPool = this.initConnectionPool();
  }

  public function logInfo(String message) {
    this.logger.info(message);
  }

  public function getConnection() {
    this.connectionPool.getConnection();
  }
}

// Sử dụng
connection = FooManager.getConnection();
FooManager.logInfo("Got connection from pool");

Áp dụng vào bài tập của bạn, mình đoán lý do mà người ra đề muốn bạn dùng Singleton là vì cả ứng dụng của bạn chỉ có một ScreenManager.

Tất nhiên mình (và chắc không có ai ở đây) sẽ không làm bài tập cho bạn cả mà sẽ hướng dẫn cách giải.

Nếu mình hiểu đúng đề, mình sẽ gợi ý cho bạn là ScreenManager class sẽ có state là một array các objects, và có các behaviors như đã được gợi ý.

Khi sử dụng Singleton pattern bạn cũng nên tìm hiểu trên mạng đọc thêm về lợi/hại của nó nữa. Sau khi đọc thêm bạn có thể viết lại ở thread này để giúp các bạn đi sau cũng có thể đọc được.

Hung viết 14:11 ngày 01/10/2018

Nếu theo đúng đề, chỉ C++ nhỏ, thì tạo 1 object Scene Manager trong hàm main() là đủ.

Singleton Design Pattern là chỉ tạo 1 đối tượng duy nhất, nhưng lại quên nhắc là 1 object trong context nào, theo đề của bạn là hàm main(), còn trong ví dụ thì đa số phần code hiện thực singleton mức application, hay 1 app chỉ có 1 object.

Dù bạn ứng dụng Singleton hay Design Pattern nào nên sử dụng linh hoạt và mềm dẻo. Design Pattern mọi người thấy khó học vì đa số chỉ chú tâm vào code, tìm case nào giống nhất mới áp dụng. Trong khi sách nguyên bản Design Pattern, tác giả nói là hãy vận dụng mềm dẻo, và code chỉ là 1 hiện thực cho solution chung của Design Pattern.

Bài liên quan
0